关于字符串长度问题
对于字符串数组str="I love fichC.com!"
sizeof(str)=100;strlen(str)=17;
那么假如我在这个str中放入字符数量为100的字符串,如:
str="abcdefg......(此处有一百个字符)"
那么在结尾加上'\0'后?sizeof(str)是不是就是101了? 本帖最后由 bin554385863 于 2019-11-7 08:59 编辑
如果一个字符串有N个字符,那么它的实际长度是N-1,剩下的一个是'\0'.
sizeof获取的是字符串占用的空间大小,
strlen获取的是所有的字符数量包括'\0'
sizeof >= strlen 你试一试不就知道了
实际上你分配了100个空间这是包含\0的 也就是说你最多能装99个字符
那么你一定要多放一些未必就放不了,也许会成功也许会出错 本帖最后由 jackz007 于 2019-11-7 14:34 编辑
char str 的作用和意义在于,规划出 100 个字节的内存空间供字符串变量 str 使用,那么,这 100 个字节的空间是受到保护的,其它变量申请内存空间一定会避开这 100 字节。但是,如果申请 100 字节,实际使用 101 字节,一开始,这个字符串也许是正常的,但是,这个越界行为却已经侵害了其它变量,导致这个变量的内容或数值发生意外地改变,即便这一侵害不足以导致程序立即崩溃,一旦这个被侵害的变量有新的赋值操作,又可能导致 str 失去结束标志,从而,给程序的正常运行带来问题和隐患。所以,越界使用变量后患无穷,编写代码的时候必须要坚决杜绝! str="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间是100,你输入了101 18084041536 发表于 2019-11-7 10:28
str="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间 ...
那为什么 char name="FishC"就可以呢? 18084041536 发表于 2019-11-7 10:28
str="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间 ...
我知道了,看似正确的输出只是编译器的优化,实际上这是不行的。谢谢了
页:
[1]