とにかく、そのsscanfチェックはおそらく十分ではありませんでした:-(
多くの場合、開発者はオーバーフローなどのエラーをさらに探したいと思うでしょう。
const char *text = "1 2 3 9999999999";
int a, b, c, d;
if (4 != sscanf(text, "%d %d %d %d", &a, &b, &c, &d))
printf("failed");
printf("Numbers: %d %d %d %d\n", a, b, c, d);
// But because of an overflow error, that code can
// print something unexpected, like: 1 2 3 1410065407
// instead of "failed"
補助文字列は、入力エラーを検出するために使用できます。次に例を示します。
const char *text = "1 9999999999 text";
QString item1, item2, item3, item4;
QTextStream stream(text);
stream >> item1 >> item2 >> item3 >> item4;
int a, b, c, d;
bool conversionOk; // Indicates if the conversion was successful
a = item1.toInt(&conversionOk);
if (conversionOk == false)
cerr << "Error 1." << endl;
b = item2.toInt(&conversionOk);
if (conversionOk == false)
cerr << "Error 2." << endl;
c = item3.toInt(&conversionOk);
if (conversionOk == false)
cerr << "Error 3." << endl;
d = item4.toInt(&conversionOk);
if (conversionOk == false)
cerr << "Error 4." << endl;
「エラー2」、「エラー3」が出力されます。および「エラー4」。
注:cin、cout、cerrは、次のように定義することもできます。
QTextStream cin(stdin, QIODevice::ReadOnly);
QTextStream cout(stdout, QIODevice::WriteOnly);
QTextStream cerr(stderr, QIODevice::WriteOnly);