Я пришел к этому question и увидеть эту линиюIs printf (c); является допустимым синтаксисом (где c - строковый литерал)?
printf(&c[i]);
Я хочу знать, что это действительный синтаксис? Печать строкового/строкового литерала без спецификатора формата %s
не вызывает неопределенное поведение или нарушение ограничений?
И если это допустимый синтаксис, то в какой цели он используется?
Я составил этот код
#include <stdio.h>
int main()
{
char *c = "Hello World";
printf(c);
printf("\n\n");
printf(&c[0]);
return 0;
}
и компилирует без предоставления каких-либо предупреждение/ошибка с выходом
Hello World
Hello World
Какой компилятор вы используете, не выдавая предупреждений при просмотре этого кода? – devnull
@devnull; GCC 4.8.1, скомпилированный с флагом 'pedantic',' Wextra', 'Wall' в режиме C99. – haccks
GCC 4.4.3 с опцией -wall дает предупреждение: формат не строковый литерал и аргументы формата –