gpt4 book ai didi

c - va_args 解析中的段错误

转载 作者:行者123 更新时间:2023-12-01 15:05:46 26 4
gpt4 key购买 nike

为什么下面的代码给出EXC_BAD_ACCESS, could not access memory ?

int combine_strings(char **outputStr,...)
{
va_list ap;
char *s, *out=0;
int len=0;

va_start(ap,outputStr);
while(s=va_arg(ap,char *))
{
len+=strlen(s);
}
va_end(ap);


if(!(out=malloc(len+1)))
exit(1);

*outputStr=out;

va_start(ap,outputStr);
while(s=va_arg(ap,char *))
{
len=strlen(s);
memcpy(out,s,len);
out+=len;
}
va_end(ap);

*out=0;

return 0;
}

最佳答案

我不得不不同意其他以前的海报。原始代码没有迭代相同的 va_list两次。它创建了两个不同的列表并依次迭代它们中的每一个,即使使用相同的变量来保存两个列表。

事实上,我设法正确运行了该功能。因此,我的猜测是问题在于函数的调用方式。这是我如何称呼它的,注意尾随 NULL以及 output 的设置范围:

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>

// ... combine_strings() goes here...
int main()
{
char * res;
char * * output = &res;
combine_strings(output, "FOO", "BAR", "BAZ", NULL);
printf("%s\n", *output);
}

上面的代码输出 FOOBARBAZ正如预期的那样。

关于c - va_args 解析中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339653/

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