我有编译错误:
libvncserver/main.c:245: error: format not a string literal and no format arguments
第245行是:
fprintf(stderr,buf);
其中buf是“char buf [256];”
我没有看到第245行有什么问题,我该如何解决? 当我注释掉那一行时,程序会编译。
答案 0 :(得分:7)
有问题的是,当您只提供printf
时,任何const char *
函数都需要char *
。由于缓冲区可以包含您想要的任何内容,因此编译器不确定它是否包含正确的格式字符串。只是做
fprintf(stderr,"%s",buf);
这样就可以确保你不会传递奇怪的东西。
答案 1 :(得分:3)
如果buf
包含类似%s
的格式说明符,程序将尝试读取您未提供的参数,这可能会导致程序崩溃或损坏您的堆栈。 GCC正在警告你。将其更改为:
fprintf(stderr, "%s", buf);