2012-09-11 11 views

答えて

11

atofを使用しないでください。 eポイントに最後に消費キャラクター過去1にポインタを

// assume: "char * mystr" is a null-terminated string 

char * e; 
errno = 0; 
double x = std::strtod(mystring, &e); 

if (*e != '\0' || // error, we didn't consume the entire string 
    errno != 0) // error, overflow or underflow 
{ 
    // fail 
} 

:代わりに、<cstdlib>から、strtodを使用し、また<cerrno>からerrnoを確認してください。 e == mystrをチェックして、のいずれかがの文字を消費しているかどうかを確認することもできます。

wchar_tストリングを扱うためのstd::wcstodもあります(<cwstring>)。 C++ 11では

外部データを扱う際に望ましい故障モードではない可能性がある、あなたも<string>から、std::to_string/std::to_wstringがありますが、私は、変換が失敗した場合には、例外がスローされますと信じています。

+0

@TerranceCohen:いいえ(でも、 "errno"をチェックして、オーバーフローとアンダーフローをキャッチすることができます)。 –

1

atofを使用することはできません。しかし、これはC++なのでstd::stringstreamを使用し、でoperator >>doubleに適用した後にチェックすることをお勧めします。

関連する問題