Предположим, я забыл закрыть прямоугольную скобку ]
сканера. Что будет тогда? Вызывает ли оно Непоследовательное поведение?Что произойдет, если я забуду закрыть сканирование?
Пример:
char str[] = "Hello! One Two Three";
char s1[50] = {0}, s2[50] = {0};
sscanf(str, "%s %[^h", s1, s2); /* UB? */
printf("s1='%s' s2='%s'\n", s1, s2);
Я получаю предупреждение от GCC при компиляции:
source_file.c: In function ‘main’:
source_file.c:11:5: warning: no closing ‘]’ for ‘%[’ format [-Wformat=]
sscanf(str, "%s %[^h", s1, s2); /* UB? */
и выход в
s1='Hello!' s2=''
Я также заметил, что sscanf
возвращает 1 Но что именно здесь происходит?
Я проверил стандарт C11, но не нашел никакой информации, связанной с этим.
Спасибо! Я предлагаю вам отправить отчет о дефектах, поскольку я не знаю, куда и как это сделать. –
Я отправил электронное письмо на секретаря рабочей группы С Даниэля Плакоша, я буду держать вас в курсе дел. – chqrlie