1

次のコードスニペットがあります。

char s[] = "2012-06-01-02";
int nYear;
int nMonth;
int nDay;
int nPass
sscanf(s, "%d-%d%-%d-%d", &nYear, &nMonth, &nDay, &nPass);

このコードはVisualStudioを使用すると期待どおりに機能しますが、gccを使用すると次のコンパイル警告が表示されます

warning: unknown conversion type character '-' in format

次に、コードを実行すると、nYear、nMonthの期待値が得られますが、nDayとnPassは両方とも0です。

なぜこれが機能しないのですか?

4

1 に答える 1

4

あなたは%-そこにあなたが望まないと思うものを持っています。:を削除し%ます

sscanf(s, "%d-%d%-%d-%d", &nYear, &nMonth, &nDay, &nPass);
                ^
                |--- delete this '%'

最終的には次のようになります。

sscanf(s, "%d-%d-%d-%d", &nYear, &nMonth, &nDay, &nPass);

余談ですが、初心者の場合は、clangを調べてみてください。このような場合、より良いエラーメッセージが表示され、より速く学習するのに役立ちます。例:

example.c:10:22: warning: invalid conversion specifier '-'
      [-Wformat-invalid-specifier]
    sscanf(s, "%d-%d%-%d", &nYear, &nMonth, &nDay, &nPass);
                    ~^
1 warning generated.
于 2013-02-26T21:34:44.970 に答える