-4

当我使用以下代码将字符串转换为浮点数时,它工作正常。但是下一个代码给出了错误。请告诉我为什么会这样?字符串是一个字符数组,只是我读到的。

代码1(工作)

#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*)

请帮忙

4

3 回答 3

7

std::string不是字符数组。
str.c_str()得到一个const char*,你应该没问题

于 2013-08-14T04:57:27.390 回答
2

句法:

#include <stdlib.h>
double atof( const char *str ); 

输入字符串是一个字符序列,可以解释为指定返回类型的数值。

该函数在它无法识别为数字的一部分的第一个字符处停止读取输入字符串。此字符可以是结束字符串的空字符。

atof() 函数需要以下形式的字符串:

     Read syntax diagramSkip visual syntax diagram
>>-+------------+--+-----+--+-digits--+---+--+--------+-+------->
       '-whitespace-'  +- + -+  |         '-.-'  '-digits-' |
                       '- – -'  '-.--digits-----------------'

因此,您的问题在于 atof 函数,它不是为接受字符串而设计的,它不以整数形式存储字符。

希望这有帮助.. :D

于 2013-08-14T05:15:55.303 回答
1

尝试使用#include<cstring>代替#include <string> 技术上,您只能保证 std::string,但所有流行的实现只是拉入 C 标头并添加 using 语句......是 C++ 标准库包含,并且是 C 标准库包含。

于 2013-08-14T05:00:08.053 回答