Как исправить этот формат ошибки компилятора, а не строковый литерал и аргументы формата?

У меня ошибка компилятора:

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

И строка 245:

fprintf(stderr,buf);

где buf - char buf [256]; "

Я не вижу, что не так с строкой 245 и как я могу ее исправить? Когда я прокомментирую эту строку, программа компилируется.

Ответ 1

Неправильно то, что любая функция printf ожидает const char *, пока вы предоставляете только char *. Поскольку буфер может содержать все, что вы хотите, компилятор не уверен, что он будет содержать правильную строку формата. Просто сделайте

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

чтобы он был уверен, что вы не собираетесь передавать что-то странное.

Ответ 2

Если buf содержит спецификатор формата, например %s, программа попытается прочитать аргумент, который вы не предоставили, что может привести к сбою вашей программы или повреждению стека. GCC предупреждает вас об этом. Измените его так:

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