gpt4 book ai didi

c - 我的字符指针返回奇怪的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:11 25 4
gpt4 key购买 nike

当尝试连接两个字符串(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);
}

最佳答案

您将 s1 传递给函数,然后对其调用 free。在你这样做之后,指针不再有效,你不能使用它。如果你这样做,就像你在 printf() 中所做的那样,你会得到未定义的行为。

关于c - 我的字符指针返回奇怪的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26326603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com