在将C与A连接时,结果不是我想要的。我怎样才能获得 hellojames 而不是 helloworldjames ?
char A[12] = "hello";
char B[12] = "world";
char C[12] = "james";
strcat(A,B);
printf("%s", A);
output = helloworld
strcat(A,C);
printf("%s",A);
output = helloworldjames
答案 0 :(得分:1)
使用strcat(A,B)时,标记A字符串结尾的空字符('\ 0')将被B中的第一个字符替换,B中的所有后续字符将从此点开始追加到A(必须足够大才能保存连接或未定义行为的结果)。
在strcat()调用之后,A不再是您最初定义的内容,而是由连接产生的新字符串。
如果你想颠倒这个,一个简单的解决方案就是在使用strlen()进行连接之前保持A的长度:
int A_len = strlen(A);
这种反转strcat(A,B)的方法只需要在连接之前设置null char:
A[A_len] = '\0';
更换后,strcat(A,C)返回hellojames。
答案 1 :(得分:0)
执行strcat(A,B)时,您正在修改A指向的字符串。您需要创建一个工作缓冲区。类似的东西:
char work[12];
strcpy(work, A);
strcat(work, B);
printf("%s", work);
strcpy(work, A);
strcat(work, C);
printf("%s", work);