Предположим, я забыл закрыть прямоугольную скобку ]
сканера. Что будет тогда? Вызывает ли он Undefined Поведение?
Пример:
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, но не нашел никакой информации, связанной с этим.