鱼C论坛

 找回密码
 立即注册
查看: 1616|回复: 8

[已解决]关于strlen()

[复制链接]
发表于 2019-4-19 17:17:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 YiMingC 于 2019-4-19 17:18 编辑

为什么代码第14行(代码如下)的'\0'加不加打印的结果都是一样的呢?
不是说strlen函数是以'\0'来判断是否结束的吗?(如图)
麻烦大家帮忙看看~

#include <stdio.h>
#include <string.h>
main()
{
        char a[2][100],ch;
        int b,i,j;
        for (i=0;i<5;i++)
        {
                printf("请输入%d句话:",i+1);
                for(j=0;(ch=getchar()!='\n');j++)
                {
                        a[i][j]=ch;
                }
                a[i][j]='\0';
        }

        b = strlen(a[0]);
        printf("%d\n",b);
}
最佳答案
2019-4-19 23:29:34
YiMingC 发表于 2019-4-19 22:50
我是这样理解的:
strlen不是统计遇到'\0'之前的字符个数吗,字符数组对于我没有赋值的地方应该是有东西 ...

不是说得很明白了

char a[2][100]; 有些编译器,会初始化a全部为'\0'。有些不会。
strlen.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-19 17:26:40 | 显示全部楼层
https://fishc.com.cn/thread-132900-1-1.html
一个道理,因为那儿刚好就有个'\0'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 18:29:14 | 显示全部楼层
本帖最后由 jackz007 于 2019-4-19 21:53 编辑

        楼主,你的字符数组已经严重越界了!
        char a[2][100],ch;
. . . . . .
        for (i=0;i<5;i++)
. . . . . .
                        a[i][j]=ch;
      当 i > 1 的时候, a[ i ][j] 变已经越界,而你越界的区域并没有事先声明,因此也不会受到应有的保护,发生任何奇怪的事情也就不足为奇了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 18:42:16 | 显示全部楼层
jackz007 发表于 2019-4-19 18:29
楼主,你的字符数组已经严重越界了!

      当 i > 1 的时候, a[j] 变已经越界,而你越界的区 ...


可是楼主出现的这个问题跟越界一点关系都没有- -
strlen(a[0])
strlen是a[0],再怎么也不会越界- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 21:15:21 | 显示全部楼层
本帖最后由 ba21 于 2019-4-19 21:18 编辑

你对strlen的理解错了吧。
strlen所作的仅仅是一个计数器的工作,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')

  char a[2][100]; 有些编译器,会初始化a全部为0。有些不会。

代码也有问题,你代码也越界
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 22:41:45 | 显示全部楼层
Croper 发表于 2019-4-19 17:26
https://fishc.com.cn/thread-132900-1-1.html
一个道理,因为那儿刚好就有个'\0'

后来又试了好几次,'\0'出现的频率这么高吗.... 越界的问题改过来了。
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 22:50:21 | 显示全部楼层
ba21 发表于 2019-4-19 21:15
你对strlen的理解错了吧。
strlen所作的仅仅是一个计数器的工作,直到碰到第一个字符串结束符'\0'为止,然 ...

我是这样理解的:
strlen不是统计遇到'\0'之前的字符个数吗,字符数组对于我没有赋值的地方应该是有东西填充的,我想通过这个程序去验证一下这个想法,如果我想的是对的应该加不加'\0'对结果影响很大才对,但实际上一样...所以不太理解是怎么回事。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 23:29:34 | 显示全部楼层    本楼为最佳答案   
YiMingC 发表于 2019-4-19 22:50
我是这样理解的:
strlen不是统计遇到'\0'之前的字符个数吗,字符数组对于我没有赋值的地方应该是有东西 ...

不是说得很明白了

char a[2][100]; 有些编译器,会初始化a全部为'\0'。有些不会。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-19 23:33:40 | 显示全部楼层
ba21 发表于 2019-4-19 23:29
不是说得很明白了

char a[2][100]; 有些编译器,会初始化a全部为'\0'。有些不会。

好吧,明白了,谢谢啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 14:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表