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