如何修复此编译器错误'格式不是字符串文字而没有格式参数'

时间:2012-02-16 05:47:13

标签: gcc

我有编译错误:

libvncserver/main.c:245: error: format not a string literal and no format arguments

第245行是:

fprintf(stderr,buf);

其中buf是“char buf [256];”

我没有看到第245行有什么问题,我该如何解决? 当我注释掉那一行时,程序会编译。

2 个答案:

答案 0 :(得分:7)

有问题的是,当您只提供printf时,任何const char *函数都需要char *。由于缓冲区可以包含您想要的任何内容,因此编译器不确定它是否包含正确的格式字符串。只是做

fprintf(stderr,"%s",buf);

这样就可以确保你不会传递奇怪的东西。

答案 1 :(得分:3)

如果buf包含类似%s的格式说明符,程序将尝试读取您未提供的参数,这可能会导致程序崩溃或损坏您的堆栈。 GCC正在警告你。将其更改为:

fprintf(stderr, "%s", buf);