RDX*_*RDX 2 c malloc variadic-functions segmentation-fault
为什么下面的代码给出了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;
}
Run Code Online (Sandbox Code Playgroud)
我不同意以前的其他海报.原始代码不会迭代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);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码FOOBARBAZ按预期输出.