atol(),atof(),atoi()函数行为,是否有一种稳定的方式从/转换为字符串/整数?

ber*_*kay 2 c c++ function

在这些日子里,我正在使用atol(),atof()和atoi()的C函数,从博客文章中我找到了一个教程并应用了:

这是我的结果:

void main()
{
    char a[10],b[10];
    puts("Enter the value of a");
    gets(a);
    puts("Enter the value of b");
    gets(b);
    printf("%s+%s=%ld and %s-%s=%ld",a,b,(atol(a)+atol(b)),a,b,(atol(a)-atol(b)));
    getch();
}
Run Code Online (Sandbox Code Playgroud)

atof()返回字符串的浮点值并atoi()返回整数值.

现在看看3我检查这段代码之间的区别:

main()
{
    char a[]={"2545.965"};
    printf("atol=%ld\t atof=%f\t atoi=%d\t\n",atol(a),atof(a),atoi(a));
}
Run Code Online (Sandbox Code Playgroud)

输出将是

atol=2545 atof=2545.965000 atoi=2545

char a[]={“heyyou”};
Run Code Online (Sandbox Code Playgroud)

现在当你运行程序时,以下将是输出(为什么?,是否有任何解决方案将纯字符串转换为整数?)

atol=0 atof=0 atoi=0
Run Code Online (Sandbox Code Playgroud)

该字符串应包含数值.现在将此程序修改为

char a[]={“007hey”};
Run Code Online (Sandbox Code Playgroud)

这种情况下的输出(在Red Hat Linux中测试)将是

atol=7 atof=7.000000 atoi=7
Run Code Online (Sandbox Code Playgroud)

所以这些功能只用了007,而不是剩下的部分(为什么?).

现在考虑一下

char a[]={“hey007?};
Run Code Online (Sandbox Code Playgroud)

该计划的输出将是

atol=0 atof=0.000000 atoi=0
Run Code Online (Sandbox Code Playgroud)

所以我只想将我的字符串转换为数字,然后再转换为相同的文本.我玩这些功能,如你所见,我得到了非常有趣的结果.

这是为什么?

是否还有其他函数可以从/转换为字符串/整数,反之亦然?

编辑:

所以作为输入,如果我拿一些名字,或者其他什么,我会将它们转换为整数/浮点数......然后应用其他一些函数.

另外,我很好奇当我使用你的任何建议时,我是否会使用相同的输入采用相同的输出?

Dir*_*tel 6

鉴于您还添加了C++标记,这个问题的高端解决方案是使用Boost lexical_cast.