Załóżmy, że zapomniałem zamknąć prawy wspornik kwadratowy ]
zestawu skanowania. Co się wtedy stanie? Czy wywołuje Nieokreślone zachowanie?Co się stanie, jeśli zapomnę zamknąć zestaw?
Przykład:
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);
dostaję ostrzeżenie z GCC podczas kompilacji:
source_file.c: In function ‘main’:
source_file.c:11:5: warning: no closing ‘]’ for ‘%[’ format [-Wformat=]
sscanf(str, "%s %[^h", s1, s2); /* UB? */
i wyjście jako
s1='Hello!' s2=''
Zauważyłam również, że sscanf
zwraca 1 Ale co dokładnie się tutaj dzieje?
Sprawdziłem standard C11, ale nie znalazłem żadnych informacji na ten temat.
Dzięki! Proponuję złożyć raport o usterce, ponieważ nie wiem, gdzie iść i jak to zrobić. –
Wysłałem e-mail do Daniela Plakosha, sekretarza grupy roboczej C, będę informować o postępach. – chqrlie