我再自学C指针的时候有一道作业
//编写一个int string_len(char *s),返回字符串s的字符长度
我写的代码如下,但是程序一直就直接输出0,请看代码:
int string_len(char *s);
int main()
{
char *name = "qwe";
int len = string_len(name);
printf("%d\n", len);
return 0;
}
int string_len(char *s){
int sum = 1;
do {
if(*s != '\0'){ //因为字符数组最后一个总归是'\0',所以这句话用来判断是不是最后一个
sum+=1; //不是的话SUM+1
}else{
return 0; //是直接返回0,问题就出现在这里程序一直返回0
}
} while (s++);
// printf("%d\n", s[0]); //被我注释掉了,这句话我用来看指针能不能指向数组的首位
return sum;
}
//另外问大家下怎么在网页中用markdown的代码块?
//一般我都是TAB键,网页下TAB一下直接跳出文本编辑框
//我想总不能一个一个按空格吧,大家怎么解决的?
1
billlee 2015-06-04 23:34:40 +08:00 1
// 你每次碰到 '\0' 就直接返回 0, 当然所有输入都返回 0 啦
int string_len(char *s) { int size = 0; while(s[size++]) {} return size-1; } |
2
black 2015-06-04 23:38:03 +08:00
//是直接返回0,问题就出现在这里程序一直返回0
题主你都知道这里有问题了,怎么还转不过弯? ... else { break; } |
3
choury 2015-06-04 23:38:04 +08:00 via Android
因为你的程序根本走不到
return sum; 学语言的同时也要学习如何debug你的程序 |
4
zhangchioulin OP @black 哎呀!真的!
|
5
zhangchioulin OP @choury 用IDE的话会DEBUG但是我是用XCODE加终端的。这个实在不知道怎么DEBUG
|
6
zhangchioulin OP @billlee 谢谢 !学到了!
|
7
zhangchioulin OP @black 谢谢,听了你的发现了 !
|
8
choury 2015-06-04 23:47:12 +08:00
@zhangchioulin lldb 用起来和gdb差不多吧,实在不行打点日志也能解决问题啊
|
9
zhangchioulin OP @choury 谢谢提醒,下次我会用的!
|
10
zhengnanlee 2015-06-04 23:51:04 +08:00 via Android
xcode的debug功能还是不错的。也可以试试clion这个IDE。话说回来,推荐从编译器的使用开始学习。
|
11
zhangchioulin OP @billlee 感觉你的代码完胜了我的这个。。。我对这段代码有一个疑惑:为什么size一直+1,软件却不会出错?不会有数组下标越界?
|
12
zhangchioulin OP @zhengnanlee 好的,我一会就回去研究下的
|
13
loveuqian 2015-06-05 00:08:58 +08:00
char为什么可以放“qwe”
|
14
wy315700 2015-06-05 00:13:37 +08:00
XCODE 可以加断点调试的。
|
15
billlee 2015-06-05 00:15:27 +08:00
@zhangchioulin 当 size 增加到 3 时, s[size] 是 0, while 的条件变为假,循环结束
|
16
omph 2015-06-05 00:16:17 +08:00
```cpp
while (*s++ != '\0') sum++; ``` |
17
alphonsez 2015-06-05 00:16:57 +08:00
如果*s == 0的话,你不就直接return 0了吗?你这个sum都没return过。
|
18
zhangchioulin OP @loveuqian 因为这是一个字符数组
|
19
zhangchioulin OP @loveuqian 我收回刚刚回答的,char *name = "qwe"; 是一个字符串常量
晕,被绕进去了,如果你知道的话轻at我下 |
20
loveuqian 2015-06-05 12:37:11 +08:00
@zhangchioulin
我还在纠结为什么写个交换2个数的值的函数要传入指针呢。。。。 |