带字符串和字符数组的不同输出

时间:2013-08-14 04:54:18

标签: c++

当我使用以下代码将字符串转换为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*)

请帮忙

3 个答案:

答案 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标准库包含。