ssd*_*ssd 0 c arrays string char
至于试图连接两个字符串(字符数组),下面的代码通过返回正确的结果return,但不是通过引用传递的参数(即,预期结果char *dst的StrAdd功能).
关于"后"的结果; printf为st打印正确的连接字符串.但变量"s1"应该包含连接的字符串.然而,s1打印出一些奇怪的东西.
有人能弄清楚它有什么问题吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *StrAdd (char *dst, const char *src) {
/* add source string "src" at the end of destination string "dst"
i.e. concatenate
*/
size_t lenDst = strlen (dst);
size_t lenSrc = strlen (src);
size_t lenTot = lenDst + lenSrc + 1;
char *sTmp = (char *) malloc (lenTot);
memcpy (&sTmp [0], &dst [0], lenDst);
memcpy (&sTmp [lenDst], &src [0], lenSrc);
sTmp [lenTot - 1] = '\0';
free (dst);
dst = (char *) malloc (lenTot);
memcpy (&dst [0], &sTmp [0], lenTot);
free (sTmp);
return (dst);
}
int main () {
char *s1 = strdup ("Xxxxx");
char *s2 = strdup ("Yyyyy");
char *st = strdup ("Qqqqq");
printf ("s1 before: \"%s\"\n", s1);
printf ("s2 before: \"%s\"\n", s2);
printf ("st before: \"%s\"\n", st);
printf ("\n");
st = StrAdd (s1, s2);
printf ("s1 after : \"%s\"\n", s1); // weird???
printf ("s2 after : \"%s\"\n", s2); // ok
printf ("st after : \"%s\"\n", st); // ok
printf ("\n");
return (0);
}
Run Code Online (Sandbox Code Playgroud)