gpt4 book ai didi

c - vsprintf 的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:26 32 4
gpt4 key购买 nike

因为这 1 行代码,我一直在抓狂。如果我不为 extra 动态分配内存(仅通过 char extra[*cur_size+1];),vsprintf 就会卡住。

char *append(char *str, int *cur_size, char *fmt, ...) {
va_list args;
va_start(args, fmt);
int len = vsnprintf(NULL, 0, fmt, args) + strlen(str);
if (len > *cur_size) {
//alloc more memory
*cur_size = len * sizeof (char) << 1;
char *extra = malloc(*cur_size+1);
// char extra[*cur_size+1]; will cause problem
strcpy(extra, str);
str = extra;
}
vsprintf(eos(str), fmt, args);
va_end(args);
LOGE("len = %d, cur_size = %d", len, *cur_size);
return str;
}

最佳答案

如果您使用:

char extra[*cur_size + 1];

数组将在下一个 范围之外,这意味着 str 将是一个悬空指针。当您使用 malloc() 时,内存会超出范围。

关于c - vsprintf 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092366/

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