4

これは、無効なフォーマットではなく、無効な入力に関する質問です。たとえば、次のコードがあるとします。

tm bar;

foo >> get_time(&bar, "%Y-%m-%d");

cout >> bar.tm_year >> bar.tm_mon >> bar.tm_mday >> endl;

次のように定義すると、これで問題ありません。次stringstream foo("2001-02-28 non-leap year");のような無効な形式がある場合は、明確なエラーが発生します。stringstream foo("bad format 2001-02-28 non-leap year");

しかし、入力が無効かどうかを検出する方法がわかりません。たとえば、次のようになります。

stringstream foo("2001-02-30 non-leap year");

この場合bar、何も問題がなかったかのように読むことができます。入力が無効であることを警告するものはありますか?

4

2 に答える 2

3

mktimeは範囲外の値も解釈しようとするため (つまり、2001-02-30 は 2001-03-01 と解釈されます)、 の後に を実行できます。mktime異なるlocaltime値が返された場合は、元の値が返されたことを意味します。無効でした。

于 2015-03-27T22:54:32.167 に答える