关于c一个简单的问题

volcan1987 2012-06-27 09:58:47
char str1[] = "abcdeft";
const char *str2 = "1111";
strcat(str1, str2);

printf("%s", str1);

这样写合法吗?

我在想,str1是一个数组,那么它初始分配的内存肯定是固定的,但是当调用strcat后,在他末尾又添加了一些东西。
假如在内存分配时,str1后面的内存被分配了,那么我调用了strcat,肯定会把这里内存的内容改写了,那程序肯定会出问题啊?
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
所以说strcat是不安全的 可以用strcat_s代替
strcat和strcat_s的区别看这里http://baike.baidu.com/view/4673101.htm
Freeze_Z 2012-06-27
  • 打赏
  • 举报
回复
strcat不进行str1的长度检查.因此需自行保证str1的长度足够.
而你的程序中的写法char str1[] = "abcdeft"; str1正好没有多余长度. str1会被"abcdeft"填满.
导致的问题是会写导致不属于str1的空间被非法覆盖.
善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
一般你想把str2连接到str1的后面,你必须确保str1数组有足够大的空间。
且str1 和str2的内存区域不能重叠 重叠行为未定义
善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
这样肯定不合法的 。
char str1[] = "abcdeft",str1数组的大小已经确定了,只能容纳"abcdeft",你再把str2的内容添加到后面是会发生内存访问错误的。


我按照你的代码跑了一遍 编译没问题,运行错误,最后也打印出了abcdeft1111
但是运行时出现内存访问异常
ouyh12345 2012-06-27
  • 打赏
  • 举报
回复
不行,会越界

69,381

社区成员

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

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