vsnprintf和strerror:segmentfault?

时间:2014-06-19 10:56:42

标签: c

我的代码如下:

#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)时,该程序运行良好,这里有什么问题?

1 个答案:

答案 0 :(得分:1)

记得阅读所有警告,并使用-Wall -Wextra ^^进行编译。 你忘了包含&#34;&lt; string.h&gt;&#34;其中包含strerror标头。 它应该与它一起工作;)。 是的,有时缺少包含可以真正使您的代码段错误。