其他分享
首页 > 其他分享> > c – atof和非null终止字符数组

c – atof和非null终止字符数组

作者:互联网

using namespace std;
int main(int argc, char *argv[]) {
    char c[] = {'0','.','5'};
    //char c[] = "0.5";
    float f = atof(c);
    cout << f*10;
    if(c[3] != '\0')
    {
        cout << "YES";
    }
}

输出:5YES

atof也可以使用非null终止的字符数组吗?如果是这样,它怎么知道停在哪里?

解决方法:

Does atof work with non-null terminated character arrays too?

不,它没有. std::atof在输入中需要以null结尾的字符串.未满足此前提条件的是未定义行为.

未定义的行为意味着任何事情都可能发生,包括程序似乎工作正常.这里发生的事情是,在数组的最后一个元素之后,你的内存中有一个字节,它不能被解释为浮点数表示的一部分,这就是你的std :: atof实现停止的原因.但那是不可靠的.

你应该这样修复你的程序:

char c[] = {'0', '.', '5', '\0'};
//                         ^^^^

标签:c-3,c,atof
来源: https://codeday.me/bug/20190725/1535120.html