Как исправить эту ошибку компилятора «форматировать не строковый литерал и не форматировать аргументы» - PullRequest
3 голосов
/ 16 февраля 2012

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

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

И строка 245:

fprintf(stderr,buf);

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

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

Ответы [ 2 ]

6 голосов
/ 16 февраля 2012

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

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

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

3 голосов
/ 16 февраля 2012

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

fprintf(stderr, "%s", buf);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...