2 xyhqqlove xyhqqlove 于 2016.01.22 21:03 提问

这样写也没问题?不是说必须原字符串要比相加的要长么?

#include
#include

int main()
{
char greeting[10]="hello ";
char name[100]="aaaaaaaaaaaaaaaa";
strcat(greeting,name);
printf("%s",greeting);
}

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.22 21:05
已采纳

你用的什么编译器,你的编译器缺少缓冲区溢出检查。这么写可能在某些环境下不会报错,但是不表示它是对的。
好比开车闯红灯不一定每次都会出事故。

xyhqqlove
xyhqqlove 你的比喻很好!
接近 2 年之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.22 22:01

这样编写,程序不稳定。
规范的做法,目标字符数组长度要大于原字符串长度。
程序能运行,不一定就没问题,当你的程序越写越大,出错的风险就越来越大。

xyhqqlove
xyhqqlove 谢谢,你们都是对的,但是只能采纳一个。
接近 2 年之前 回复
91program
91program   Ds   Rxr 2016.01.22 21:17

肯定是有问题的,但有些不会引起程序异常报错罢了!
但肯定会由于越界,而覆盖一些不应该修改的变量。例如:在 greeting 后再定义一个变量,这个变量可能就由于内存操作越界而其数值发生变化。如果变量是指针,这时再操作指针,极大的可能会是一个非法的、不允许访问的地址。

xyhqqlove
xyhqqlove 谢谢,我们没有学过你说的这些
接近 2 年之前 回复
enpterexpress
enpterexpress   2016.01.22 22:55

规避出现错误的可能

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!