Supponiamo di aver dimenticato di chiudere la staffa quadrata destra ]
di un set. Cosa succederà allora? Invoca il comportamento indefinito?Cosa succede se dimentico di chiudere un set?
Esempio:
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);
Ho ricevuto un avviso da GCC durante la compilazione:
source_file.c: In function ‘main’:
source_file.c:11:5: warning: no closing ‘]’ for ‘%[’ format [-Wformat=]
sscanf(str, "%s %[^h", s1, s2); /* UB? */
e l'uscita come
s1='Hello!' s2=''
Ho anche notato che i sscanf
restituisce 1 Ma cosa sta succedendo esattamente qui?
Ho controllato lo standard C11, ma non ho trovato alcuna informazione relativa a questo.
Grazie! Ti suggerisco di presentare un rapporto sui difetti perché non so dove andare e come farlo. –
Ho mandato una mail a Daniel Plakosh, il segretario del gruppo di lavoro del C, ti terrò informato sul procedimento. – chqrlie