一个C语言的菜鸟问题(计算字符串长度)

来源:百度知道 编辑:UC知道 时间:2024/05/22 03:25:09
#include "stdio.h"
main()
{
int i=0,len;
char str[80]="Happy";

for(i=0;str[i]!='\0';i++) /*计算字符串的有效长度*/
; /*这个分号我不懂,为什么没有len=4,而有了len=5.
len=i;
printf("len=%d\n",len);
for(i=0;str[i]!='\0';i++) /*输出字符串*/
putchar(str[i]);
}
对于第六行的分号不懂什么意思,请大侠们帮忙解答,谢谢了

'\0'是字符串的结束标志,在for(i=0;str[i]!='\0';i++) 中,i从0到5,当i=5时,str〔i〕='\0',所以结束循环,因此len=5,而不是等于4,分号是因为循环体不需要,每次i都会加1就行了,最后得到就是长度

就是循环结束了.循环体没内容

这个for循环执行了一个空语句;(什么都不做)
目的是达到str[i]='\0'这样i就存储了字符串结束的位置

因为
for(i=0;str[i]!='\0';i++)
;
len=i;
等价于for(i=0;str[i]!='\0';i++)
{
;
}
len=i;

但是

for(i=0;str[i]!='\0';i++)
len=i;

等价于
for(i=0;str[i]!='\0';i++)
{
len=i;
}
当i等于5 的时候str[i]='\0'所以就不再执行{}内的程序了。
第一种情况因为最后i=5,然后你在外边执行了len=i
所以len=5;
第二种情况是:
只要str[i]!='\0'就执行len=i;
结果len分别赋了5次值分别为0,1,2,3,4
当i=5 的时候str[i]='\0',所以不再执行len=i;所以len保存最后一次结果:4

建议:
遇到if,for,while等语句一般情况下如果只有一句可以不写在{}内,但是强烈建议写在{}内,这样增加可读性,也减少错误几率。