为撒运行结果不一样?

请你们看一下下面这段代码,代码和运行结果都在这两张图片里,谢谢!

img

img

strcat函数的要求是:第一个字符数组必须有足够的空间来容纳拼接后的字符串,否则拼接错误。
第一段代码中,aim数组的长度是固定的,只有8个字符(9个char空间,还有一个\0,相当于char aim[9]="I study ";)第一段代码能正确显示纯属幸运,大多数情况下,显示的会比I study hard 多很多不可知的字符。
第二段代码中aim是一个字符串常量指针,内容是不可更改的,strcat调用失败。
所以这两段代码中,strcat函数虽然能在aim后面追加内容,但是aim的空间是固定的,所以后面能否正确显示是不确定的。特别是第二段代码,aim是常量指针,它指向的内容不可更改。拼接错误后出现什么结果是不可预知的。

char aim[14]="I study"; //aim的大小必须大于等于14才能保证strcat成功且准确
char str[]="hard";
strcat(aim,str); 


第一张图是字符数组,存的是字符串,strcat连接没问题。
第二个是一个字符指针 存的是那个字符串的地址
你将地址去用strcat连接是不对的,连接的应该是字符串。
希望对题主有所帮助,望采纳!

char *aim没有内存空间,得申请内存空间,用malloc函数