在C中使用strcat()函数

时间:2015-03-21 23:55:39

标签: c

在将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

2 个答案:

答案 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);