鱼C论坛

 找回密码
 立即注册
查看: 1897|回复: 6

[已解决]关于字符串长度问题

[复制链接]
发表于 2019-11-7 08:46:57 | 显示全部楼层 |阅读模式

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

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

x
对于字符串数组
str[100]="I love fichC.com!"
sizeof(str)=100;strlen(str)=17;
那么假如我在这个str[100]中放入字符数量为100的字符串,如:
str[100]="abcdefg......(此处有一百个字符)"
那么在结尾加上'\0'后?sizeof(str)是不是就是101了?
最佳答案
2019-11-7 10:27:14
本帖最后由 jackz007 于 2019-11-7 14:34 编辑

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

使用道具 举报

发表于 2019-11-7 08:54:54 From FishC Mobile | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-7 08:59 编辑

如果一个字符串有N个字符,那么它的实际长度是N-1,剩下的一个是'\0'.
sizeof获取的是字符串占用的空间大小,
strlen获取的是所有的字符数量包括'\0'
sizeof >= strlen
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-7 08:55:46 | 显示全部楼层
你试一试不就知道了
实际上你分配了100个空间  这是包含\0的 也就是说你最多能装99个字符
那么你一定要多放一些  未必就放不了,也许会成功  也许会出错  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-7 10:27:14 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-7 14:34 编辑

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

使用道具 举报

发表于 2019-11-7 10:28:39 | 显示全部楼层
str[100]="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间是100,你输入了101
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-9 16:10:34 | 显示全部楼层
18084041536 发表于 2019-11-7 10:28
str[100]="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间 ...

那为什么 char name[5]="FishC"就可以呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-9 16:19:03 | 显示全部楼层
18084041536 发表于 2019-11-7 10:28
str[100]="abcdefg......(此处有一百个字符)"
在结尾加上'\0'后,编译是通不过的 ,以为你定义了 str 空间 ...

我知道了,看似正确的输出只是编译器的优化,实际上这是不行的。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 12:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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