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

#include
#include

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

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

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

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

规避出现错误的可能