gpt4 book ai didi

c - C中简单可变字符串连接的内存分配

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

我有以下测试函数来复制和连接可变数量的字符串参数,自动分配:

char *copycat(char *first, ...) {
va_list vl;
va_start(vl, first);
char *result = (char *) malloc(strlen(first) + 1);
char *next;
strcpy(result, first);
while (next = va_arg(vl, char *)) {
result = (char *) realloc(result, strlen(result) + strlen(next) + 1);
strcat(result, next);
}
return result;
}

问题是,如果我这样做:

puts(copycat("herp", "derp", "hurr", "durr"));

它应该打印出一个 16 字节的字符串,"herpderphurrdurr"。相反,它打印出一个 42 字节的字符串,这是正确的 16 个字节加上 26 个字节的垃圾字符。

我不太清楚为什么。有什么想法吗?

最佳答案

变量参数列表函数不会神奇地知道有多少个参数,因此您很可能会遍历堆栈,直到碰巧遇到 NULL

您要么需要一个参数 numStrings,要么在您的字符串列表之后提供一个明确的空终止符参数。

关于c - C中简单可变字符串连接的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117355/

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