Вопрос простой и простой, s
- это строка, мне вдруг пришла в голову идея использовать printf(s)
, чтобы увидеть, будет ли она работать, и я получил предупреждение в одном случае, а в другом - нет.
char* s = "abcdefghij\n";
printf(s);
// Warning raised with gcc -std=c11:
// format not a string literal and no format arguments [-Wformat-security]
// On the other hand, if I use
char* s = "abc %d efg\n";
printf(s, 99);
// I get no warning whatsoever, why is that?
// Update, I've tested this:
char* s = "random %d string\n";
printf(s, 99, 50);
// Results: no warning, output "random 99 string".
Итак, какова разница между printf(s)
и printf("%s", s)
и почему я получаю предупреждение только в одном случае?