は、私がスキャンセットの右角括弧]
を閉じるのを忘れたとします。その後何が起こるでしょうか?それは未定義の振る舞いを呼び出しますか?スキャンセットを閉じるのを忘れるとどうなりますか?
例:コンパイルしたとき、私はGCCから警告を受ける
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);
:
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