Почему вывод фрагмента кода printf ("%.%.%.");получается% .0% .0% .0? - PullRequest
0 голосов
/ 19 сентября 2019

Я знаю, что период . символ разделяет ширину поля с точностью.Но я не понимаю, как будет ноль после %.Каждый раз, когда я бегу, он показывает один и тот же вывод.

Код:

#include <stdio.h>
int main() { printf("%. %. %. "); return 0; }

Выход: %.0 %.0 %.0

main.c:13:15: warning: unknown conversion type character 0x20 in format [-Wformat=]                                                                                                         
main.c:13:18: warning: unknown conversion type character 0x20 in format [-Wformat=]                                                                                                         
main.c:13:21: warning: unknown conversion type character 0x20 in format [-Wformat=]                                                                                                         

1 Ответ

3 голосов
/ 19 сентября 2019

Вы не указали действительный спецификатор преобразования после % (например, d, x, f, g, c, s, p, среди прочих), поэтомувы вызываете неопределенное поведение .Это означает, что может произойти все, что угодно .

Из раздела 7.19.6.1/9 стандарта ISO C99:

Если спецификация преобразования недопустима, поведениеundefined. 239) Если какой-либо аргумент имеет неправильный тип для соответствующей спецификации преобразования, поведение не определено.

...