关于strlen()
本帖最后由 YiMingC 于 2019-4-19 17:18 编辑为什么代码第14行(代码如下)的'\0'加不加打印的结果都是一样的呢?
不是说strlen函数是以'\0'来判断是否结束的吗?(如图)
麻烦大家帮忙看看~
#include <stdio.h>
#include <string.h>
main()
{
char a,ch;
int b,i,j;
for (i=0;i<5;i++)
{
printf("请输入%d句话:",i+1);
for(j=0;(ch=getchar()!='\n');j++)
{
a=ch;
}
a='\0';
}
b = strlen(a);
printf("%d\n",b);
}
https://fishc.com.cn/thread-132900-1-1.html
一个道理,因为那儿刚好就有个'\0' 本帖最后由 jackz007 于 2019-4-19 21:53 编辑
楼主,你的字符数组已经严重越界了!
char a,ch;
. . . . . .
for (i=0;i<5;i++)
. . . . . .
a=ch;
当 i > 1 的时候, a[ i ] 变已经越界,而你越界的区域并没有事先声明,因此也不会受到应有的保护,发生任何奇怪的事情也就不足为奇了。 jackz007 发表于 2019-4-19 18:29
楼主,你的字符数组已经严重越界了!
当 i > 1 的时候, a 变已经越界,而你越界的区 ...
可是楼主出现的这个问题跟越界一点关系都没有- -strlen(a)
strlen是a,再怎么也不会越界- - 本帖最后由 ba21 于 2019-4-19 21:18 编辑
你对strlen的理解错了吧。
strlen所作的仅仅是一个计数器的工作,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')
char a; 有些编译器,会初始化a全部为0。有些不会。
代码也有问题,你代码也越界 Croper 发表于 2019-4-19 17:26
https://fishc.com.cn/thread-132900-1-1.html
一个道理,因为那儿刚好就有个'\0'
后来又试了好几次,'\0'出现的频率这么高吗....{:5_96:} 越界的问题改过来了。 ba21 发表于 2019-4-19 21:15
你对strlen的理解错了吧。
strlen所作的仅仅是一个计数器的工作,直到碰到第一个字符串结束符'\0'为止,然 ...
我是这样理解的:
strlen不是统计遇到'\0'之前的字符个数吗,字符数组对于我没有赋值的地方应该是有东西填充的,我想通过这个程序去验证一下这个想法,如果我想的是对的应该加不加'\0'对结果影响很大才对,但实际上一样...所以不太理解是怎么回事。 YiMingC 发表于 2019-4-19 22:50
我是这样理解的:
strlen不是统计遇到'\0'之前的字符个数吗,字符数组对于我没有赋值的地方应该是有东西 ...
不是说得很明白了
char a; 有些编译器,会初始化a全部为'\0'。有些不会。 ba21 发表于 2019-4-19 23:29
不是说得很明白了
char a; 有些编译器,会初始化a全部为'\0'。有些不会。
好吧,明白了,谢谢啦~
页:
[1]