gpt4 book ai didi

c - 数组连接函数返回乱码。

转载 作者:行者123 更新时间:2023-11-30 20:54:16 26 4
gpt4 key购买 nike

这涉及到两个函数,下面列出了两个函数:

char *catw(char *s1, char sep, char *s2) 
{
char s[strlen(s1) + strlen(s2) + 1];
for(int i = 0; i < strlen(s1); i++) {
s[i] = s1[i];
}
s[strlen(s1)] = sep;
for(int j = 1; j <= strlen(s2); j++) {
s[j + strlen(s1)] = s2[j];
}
char *rs = s;
return rs;
}

上面的函数工作正常,它接受两个字符串并使用它们之间的字符将它们连接在一起。

char *catw_arr(char *ss[], char sep)
{
char *ar = ss[0];
for(int i = 1; i < strlen(ss); i++)
{
ar = catw(ar, sep, ss[i]);
printf("%s\n", ar);

}
return ar;
}

然而,这个函数是有问题的。它应该采用一个字符串数组,其中一个 int 是数组的长度,还有一个分隔符,并将所有字符串连接在一起。 printf 在那里是因为我想测试发生了什么。

这是我正在使用的主要功能:

int main()
{
char *abc[3] = {"a", "b", "c"};
printf("%s\n", catw_arr(abc, 3, '/'));
return 0;
}

这就是它产生的结果:

a/
?ĶS?/
?ĶS?/

老实说,我不知道问题出在哪里。我假设它将第一个字符串与分隔符连接起来,但随后它遇到了一些无法处理的废话并开始输出乱码。

最佳答案

函数 catw 实际上是你的问题。您正在将 s 变量定义为数组。该变量以及与其关联的存储仅在函数运行期间有效。

当您将 s 复制到 rs 时,您只需复制地址,而不是关联存储。一旦函数结束,srs 都指向已释放的内存,对它们的任何访问都将是未定义的行为。因为它们仍然指向堆栈内存,所以您不会遇到段错误,但您正在读取的数据已被其他内容替换。

关于c - 数组连接函数返回乱码。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927078/

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