C++ strtod如何检查0是错误值还是正确值

C++ strtod如何检查0是错误值还是正确值,c++,strtod,C++,Strtod,我想把字符串转换成双精度。我这样做: bool String2ValueType(const std::string & a_str_value_type, double & a_result) { if(a_str_value_type.empty()) return false; char * end; double result = strtod(a_str_value_type.c_str(), &end); if

我想把字符串转换成双精度。我这样做:

bool String2ValueType(const std::string & a_str_value_type, double & a_result)
{
    if(a_str_value_type.empty())
        return false;

    char * end;
    double result = strtod(a_str_value_type.c_str(), &end);
    if(*end!=NULL)
        return false;
    a_result = result;
    return true;
}
如果结果的值为0,如何检查结果是否良好? 例如,如果我发送字符串(“0”),我将得到0,这不是错误。 但我也可以发送一些其他字符串,即数字,但它不会被转换,我也会得到0(错误)(我说的是*end==0时的情况)

如果未执行任何转换,则返回零,并返回nptr的值 存储在endptr引用的位置

至少,曼佩奇是这么说的

如果未执行任何转换,则返回零,并返回nptr的值 存储在endptr引用的位置


至少,手册页上是这么说的。

我个人会用它来代替。无论如何,如果无法执行转换,则将
结束
设置为转换提供的初始地址。也就是说,
end==a_str\u value\u type.c_str()
意味着没有发生转换。我个人会使用它。无论如何,如果无法执行转换,则将
结束
设置为转换提供的初始地址。也就是说,
end==a_str_value_type.c_str()
意味着没有发生转换。我不知道为什么,但我一直使用红色的nullptr而不是nptr。这解释了很多,我不知道为什么,但我一直用红色的nullptr代替nptr。这解释了很多,谢谢