字符简单问题

LinJie98
Apache 顶级项目 Flink中文文档翻译贡献者
2017-01-03 09:50:09
为什么77题答案是有可能导致数据错误,而不是B选项这个答案
...全文
291 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-05
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
自信男孩 2017-01-05
  • 打赏
  • 举报
回复
自信男孩 2017-01-05
  • 打赏
  • 举报
回复
我的头都转的脖子疼了。终于看明白题目了。 原因是越界了,建议使用strncpy strncpy(s1, s2, strlen(s1));有多少空间就能装多少字符,多了装不了溢出了。溢出没关系,不要溢到只读区域,不然就会出现段错误。所以,小心一些,strncpy比strcpy安全一些了。 不是所有情况都会出现段错误,但是溢出是必定的,你把这两个变量定义成全局的或者在栈上申请空间试试。有可能会拷贝成功。但是不建议这样做,只是作为一个尝试。
neunap 2017-01-04
  • 打赏
  • 举报
回复
引用 楼主 w_linux 的回复:
为什么77题答案是有可能导致数据错误,而不是B选项这个答案
用隐式长度定义数组,则必须给数组赋初始值,这样编译器会根据实际后面数值长度来给数组定长。 char s1[] = "That girl"; // 加上\0共10字节 char s2[] = "is beatiful"; // 加上\0共12字节 把s2的内容复制到s1中,导致数组越界,出现不可预测的问题。
小灸舞 版主 2017-01-04
  • 打赏
  • 举报
回复
字符数组越界是未定义行为
幻夢之葉 2017-01-03
  • 打赏
  • 举报
回复
因为后者长度大于前者,后者复制到前者会跃出边界 可能导致程序崩溃,也可能导致不仅仅是s1中的数据被篡改 这个行为涉及到修改了别的内存
孙建飞的博客 2017-01-03
  • 打赏
  • 举报
回复
s1的长度未知,所以会导致数据错误。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧