我的代码如下:
#include <stdio.h>
#include <stdarg.h>
#include <errno.h>
int test(const char *fmt, ...);
int main(void)
{
int i;
errno = ERANGE;
const char *s = "test for vsnprintf";
test("%d,%s", i, strerror(errno));
}
int test(const char *fmt, ...)
{
char buf[512];
va_list args;
va_start(args, fmt);
vsnprintf(buf, sizeof(buf), fmt, args);
printf("%s\n", buf);
va_end(args);
}
上面的代码会抛出一个段错误,但是当我将test("%d,%s", i, strerror(errno))
替换为test("%d,%s", i, s)
时,该程序运行良好,这里有什么问题?
答案 0 :(得分:1)
记得阅读所有警告,并使用-Wall -Wextra ^^进行编译。 你忘了包含&#34;&lt; string.h&gt;&#34;其中包含strerror标头。 它应该与它一起工作;)。 是的,有时缺少包含可以真正使您的代码段错误。