1

アトイについて質問です。atoi を使用して文字を数値に変換できるかどうかを確認しようとしていますが、数値が 0 の場合、どうすれば回避できますか? atoi が失敗した場合は 0 を返しますが、機能した場合は数値の値も返すことを理解しています。この場合、0 は両方のカテゴリに該当します。

代わりに strtol を使用する場合、配列内の文字が >= ~ 0 であるか、存在しないか、まったく存在しないかを確認する方法はありますか。

たとえば、動的配列が {1 40 500} で構成されていて、位置 8 (範囲外) で strtol を試行した場合、NULL または atoi/strtol が失敗したことを示す何らかの指示を返したいと考えています。

4

3 に答える 3

2

代わりに整数を読み取るために使用できますsscanf。その方法では、sscanf の戻り値をチェックして、整数が見つかったかどうかを確認します。

char a[] = "12";
char b[] = "abc";
int n = 0;

assert(sscanf(a, "%d", &n ) == 1);
assert(sscanf(b, "%d", &n ) == 0);
于 2016-03-01T07:28:59.470 に答える
1

私の番号が0の場合、どうすればそれを回避できますか?

そもそも使わないことatoi()で。strto*()代わりに関数ファミリーのメンバーを使用してください。

于 2016-03-01T07:08:14.780 に答える
1

{1 40 500} で構成される動的配列

Cストリング「1 40 500」のことですか?その場合、null 終端 (位置 8) で strtol を呼び出すと、渡されたものと同じ ptr が 2 番目のパラメーターに返されます。

char *s = "1 40 500";
char *ptr;
strtol(&s[8], &ptr, 10);
if (&s[8] == ptr) {
  // code executed if strtol was called at the null termination
}
于 2016-12-14T18:18:42.967 に答える