黑马程序员技术交流社区

标题: 字符串长度输出出毛病了求告知 [打印本页]

作者: 曹雨    时间: 2014-6-19 15:29
标题: 字符串长度输出出毛病了求告知
本帖最后由 曹雨 于 2014-6-19 17:42 编辑

下午在写代码的时候出现了个奇怪的事,请各位大神们解答谢谢了
#include <stdio.h>
int string_len(char *s)
{
int i;
for(i=0;s!='\0';i++)
return i;
}
int main()
{
  char a[]="abc";
printf("%d\n",string_len(a));
return 0;
}
结果是0
然后我又重写了一遍
#include<stdio.h>
int string_len(char*s)  
{  
int i;  
for(i=0;s!='\0';i++);  
return i;  
}
int main()
{
char a[]="abc";
printf("%d\n",string_len(a));
return 0;
}
运行结果成了3.
不知道哪里搞出毛病了两种都留下来了,粘贴复制,还是原来的结果。。求告知- -迷惑中

作者: 刘元明    时间: 2014-6-19 17:18
本帖最后由 刘元明 于 2014-6-19 17:31 编辑

你的string_len函数进去就返回有意义么,真正的做法是循环结束返回i
作者: 刘元明    时间: 2014-6-19 17:19
本帖最后由 刘元明 于 2014-6-19 17:40 编辑

出现问题的原因很简单,第一种写法for循环进去,就返回i,而i的初始值就是0,所以返回0;因为你的第二个写法for循环后面多了个";"for循环走过a,b,c后遇到‘\0’退出循环,执行下一句才返回,此时i的值就是3
作者: 刘元明    时间: 2014-6-19 17:28
本帖最后由 刘元明 于 2014-6-19 17:33 编辑

你的误区就是不清楚for循环执行的过程,第一种写法,i的值不会累加后再返回,而是执行第一次的时候就return。第二种写法,ruturn i;上边这句是在循环执行完之后返回
作者: 曹雨    时间: 2014-6-19 17:40
刘元明 发表于 2014-6-19 17:19
出现问题的原因很简单,第一种写法for循环进去,就返回i,而i的初始值就是0,所以返回0;因为你的第二个写法 ...

3q.看到了,真马虎。谢谢吼吼:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2