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";
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT: 5YES
atof也可以使用非null终止的字符数组吗?如果是这样,它怎么知道停在哪里?
atof也可以使用非null终止的字符数组吗?
不,它没有.std::atof在输入中需要以null结尾的字符串.未满足此前提条件的是未定义行为.
未定义的行为意味着任何事情都可能发生,包括程序似乎工作正常.这里发生的事情很可能是你的数组的最后一个元素之后的内存中有一个字节,它不能被解释为浮点数表示的一部分,这就是你执行std::atof停止的原因.但那是不可靠的.
你应该这样修复你的程序:
char c[] = {'0', '.', '5', '\0'};
// ^^^^
Run Code Online (Sandbox Code Playgroud)