为什么字符串在strcat()之后被改变了?

0 c string output

这是源代码

int main()
{
    char str[]="dance";
    char str1[]="hello";
    char str2[]="abcd";
    strcat(str1,str2);
    printf("%s",str);
}
Run Code Online (Sandbox Code Playgroud)

输出 - bcd

为什么str改变之后strcat(str1,str2);

hac*_*cks 5

str1没有足够的空间来连接字符串str2.这会调用未定义的行为.你可能得到任何东西.预期或意外结果.
现在试试这个:

#include <stdio.h>
#include <string.h> 

int main(void) {
    char str[]="dance";
    char str1[10]="hello";
    char str2[]="abcd";
    strcat(str1,str2);
    printf("%s\n",str1);
    printf("%s\n",str);

    return 0;
}  
Run Code Online (Sandbox Code Playgroud)

输出:

helloabcd
dance
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下最可能发生的是`str`在`str1`之后立即分配在内存中.`strcat`调用写入`str1`的末尾,破坏`str`.这不是唯一可行的行为; 这就是你(OP)碰巧遇到的这种特殊情况. (2认同)