A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹雨 中级黑马   /  2014-6-19 15:29  /  989 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹雨 于 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.
不知道哪里搞出毛病了两种都留下来了,粘贴复制,还是原来的结果。。求告知- -迷惑中

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

4 个回复

倒序浏览
刘元明 来自手机 中级黑马 2014-6-19 17:18:18
沙发
本帖最后由 刘元明 于 2014-6-19 17:31 编辑

你的string_len函数进去就返回有意义么,真正的做法是循环结束返回i
回复 使用道具 举报
刘元明 来自手机 中级黑马 2014-6-19 17:19:56
藤椅
本帖最后由 刘元明 于 2014-6-19 17:40 编辑

出现问题的原因很简单,第一种写法for循环进去,就返回i,而i的初始值就是0,所以返回0;因为你的第二个写法for循环后面多了个";"for循环走过a,b,c后遇到‘\0’退出循环,执行下一句才返回,此时i的值就是3
回复 使用道具 举报
刘元明 来自手机 中级黑马 2014-6-19 17:28:13
板凳
本帖最后由 刘元明 于 2014-6-19 17:33 编辑

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

3q.看到了,真马虎。谢谢吼吼:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马