2012-03-10 11 views

答えて

5

それは文字列ない文字配列は、その後、ヌル文字で終了していない場合。 strto*()関数のいずれかに文字列を指さない引数が渡された場合、その動作は未定義です。最初のヌルを含む

文字列がで終了した文字の連続配列があると :用語の

7.1.1定義:2011 ISO C標準のlatest draftを参照

キャラクター。ライブラリ関数の

7.1.4用途:関数の引数は、そのような機能のドメイン外の値 、またはアドレス 外部ポインタとして無効な値を有する(場合

(対応するパラメータが const修飾されていない場合)、または 関数が可変数の引数を持つ関数によって期待されない型(昇格後)のいずれかである場合、動作は未定義です。

7.22.1.3にstrtod、strtof、及びstrtold機能は:

にstrtod、 strtof 、そしてstrtold関数は、文字列の最初の部分 変換

nptrダブルfloat,long doubleの表記である。

(強調追加)

ように文字列を指していない引数は、関数の領域外にあります。

{ '1', '2', '3', 'x', 'y', 'z' }のような配列が含まれている場合は、希望の値を終了するxをスキャンする必要はありませんが、その動作は明示的に定義されていないため、離れてしまう可能性があります。

これらの機能を使用する場合は、必要に応じてアレイを別のバッファにコピーし、明示的にヌル終了する必要があります。

1

あなたの入力が何らかの理由で有効な桁文字でない限り、処理は停止し、最初のNULが見つかるまで幸いにメモリを読み取るべきではありません。

だから、あなたは大丈夫だと思います。

+0

たとえば、変換された数字の後に空白または句読点の文字(またはその文字が含まれていない場合は文字)がスキャンを停止します。 –

+0

@JonathanLeffler:先頭の空白、小数点、有効な入力である可能性のあるものを除く、はい。 –

+0

seg-faultエラーが発生しませんか? –

関連する問題