当我使用以下代码将字符串转换为float时,它工作正常。但是下一个代码会给出错误。请告诉我为什么会这样? String是一个char数组,只是我读的。
Code1(工作)
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
char str[]="301.23";
float f=atof(str);
cout<<sizeof(str)<<" is size with contents "<<str<<endl;
cout<<sizeof(f)<<" is size with contents "<<f<<endl;
return 0;
}
代码2(不工作)
#include<stdlib.h>
#include<string>
#include<iostream>
using namespace std;
int main()
{
string str="301.23";
float f=atof(str);
cout<<sizeof(str)<<" is size with contents "<<str<<endl;
cout<<sizeof(f)<<" is size with contents "<<f<<endl;
return 0;
}
错误:
error: cannot convert std::string to const char* for argument 1 to double atof(const char*)
请帮忙
答案 0 :(得分:7)
std::string
不是char数组
使用str.c_str()
获取const char*
,您应该没问题
答案 1 :(得分:2)
语法:
#include <stdlib.h>
double atof( const char *str );
输入字符串是一系列字符,可以解释为指定返回类型的数值。
该函数停止读取第一个字符处的输入字符串,该字符串无法识别为数字的一部分。该字符可以是结束字符串的空字符。
atof()函数需要以下形式的字符串:
Read syntax diagramSkip visual syntax diagram
>>-+------------+--+-----+--+-digits--+---+--+--------+-+------->
'-whitespace-' +- + -+ | '-.-' '-digits-' |
'- – -' '-.--digits-----------------'
因此,你的问题在于atof函数,它不是为了接受字符串而不是以整数形式存储字符。
希望这有助于......:D
答案 2 :(得分:1)
尝试使用#include<cstring>
代替#include <string>
从技术上讲,你只保证std :: string,但是所有流行的实现都只需要插入C头并添加一个using语句......
是一个C ++标准库包含,并且是C标准库包含。