11
假設我忘記關閉掃描集的右方括號]
。那麼會發生什麼?它是否調用未定義的行爲?如果我忘記關閉掃描集會發生什麼情況?
例子:
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標準,但沒有找到與此相關的信息。
謝謝!我建議你提交缺陷報告,因爲我不知道該去哪裏以及如何去做。 –
我向C工作組祕書Daniel Plakosh發了一封電子郵件,我會在會議記錄上公佈你的信息。 – chqrlie