Как исправить этот формат ошибки компилятора, а не строковый литерал и аргументы формата?
У меня ошибка компилятора:
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);