zhuwei9999 发表于 2019-11-7 08:46:57

关于字符串长度问题

对于字符串数组
str="I love fichC.com!"
sizeof(str)=100;strlen(str)=17;
那么假如我在这个str中放入字符数量为100的字符串,如:
str="abcdefg......(此处有一百个字符)"
那么在结尾加上'\0'后?sizeof(str)是不是就是101了?

bin554385863 发表于 2019-11-7 08:54:54

本帖最后由 bin554385863 于 2019-11-7 08:59 编辑

如果一个字符串有N个字符,那么它的实际长度是N-1,剩下的一个是'\0'.
sizeof获取的是字符串占用的空间大小,
strlen获取的是所有的字符数量包括'\0'
sizeof >= strlen

wp231957 发表于 2019-11-7 08:55:46

你试一试不就知道了
实际上你分配了100个空间这是包含\0的 也就是说你最多能装99个字符
那么你一定要多放一些未必就放不了,也许会成功也许会出错

jackz007 发表于 2019-11-7 10:27:14

本帖最后由 jackz007 于 2019-11-7 14:34 编辑

       char str 的作用和意义在于,规划出 100 个字节的内存空间供字符串变量 str 使用,那么,这 100 个字节的空间是受到保护的,其它变量申请内存空间一定会避开这 100 字节。但是,如果申请 100 字节,实际使用 101 字节,一开始,这个字符串也许是正常的,但是,这个越界行为却已经侵害了其它变量,导致这个变量的内容或数值发生意外地改变,即便这一侵害不足以导致程序立即崩溃,一旦这个被侵害的变量有新的赋值操作,又可能导致 str 失去结束标志,从而,给程序的正常运行带来问题和隐患。所以,越界使用变量后患无穷,编写代码的时候必须要坚决杜绝!

18084041536 发表于 2019-11-7 10:28:39

str="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间是100,你输入了101

zhuwei9999 发表于 2019-11-9 16:10:34

18084041536 发表于 2019-11-7 10:28
str="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间 ...

那为什么 char name="FishC"就可以呢?

zhuwei9999 发表于 2019-11-9 16:19:03

18084041536 发表于 2019-11-7 10:28
str="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间 ...

我知道了,看似正确的输出只是编译器的优化,实际上这是不行的。谢谢了
页: [1]
查看完整版本: 关于字符串长度问题