gpt4 book ai didi

c++ - atof 和非空终止字符数组

转载 作者:太空狗 更新时间:2023-10-29 20:05:04 25 4
gpt4 key购买 nike

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 是否也适用于非空终止字符数组?如果是这样,它怎么知道在哪里停止?

最佳答案

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

不,它没有std::atof在输入中需要一个以 null 结尾的字符串。未能满足此先决条件是未定义的行为

未定义的行为意味着任何 都可能发生,包括程序似乎运行良好。这里发生的事情是,你在数组的最后一个元素之后恰好在内存中有一个字节,它不能被解释为 float 表示的一部分,这就是为什么你的 std::atof 停止。但这是不可靠的。

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

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

关于c++ - atof 和非空终止字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com