为啥 atoi 函数不能将 const char * 转换为 int?

Posted

技术标签:

【中文标题】为啥 atoi 函数不能将 const char * 转换为 int?【英文标题】:Why atoi function can't convert const char * to int?为什么 atoi 函数不能将 const char * 转换为 int? 【发布时间】:2012-11-10 19:26:43 【问题描述】:

为什么在这段代码中atoi()函数不能正常工作,为什么编译器会报这个错误:

初始化`int atoi(const char*)'的参数1

我的代码如下:

#include <iostream.h>
#include <stdlib.h>
int main()

    int a;
    char b;
    cin >> b;
    a = atoi(b);
    cout << "\na";  
    return 0;

【问题讨论】:

【参考方案1】:

bchar,但在 atoi() 中,您必须通过 char *const char *,因为 c++ 是严格的类型检查语言,因此您得到了这个

应该是这个cout&lt;&lt;"\n"&lt;&lt;a;而不是这个cout&lt;&lt;"\na"因为后面的不会打印a的值

【讨论】:

【参考方案2】:

你可以在这里看到atoi

Atoi 收到一个指向 char 的指针,而不是像你做的那样的 char。 这是有道理的,因为通过这种方式,您可以将 atoi 应用于超过 1 位的“数字”(以字符串表示),例如 atoi("100");

int atoi ( const char * str );

否则,如果是char,只能转换'0','1','2'..'9'。

编辑:试试这个例子:

#include <iostream>
#include <stdlib.h>
int main()

    int a;
    char b[10];


    cin >> b;
    a = atoi(b);

    cout<<"\n"<<a; 
    return 0;

【讨论】:

以上是关于为啥 atoi 函数不能将 const char * 转换为 int?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 const char* 不能与 boost 的 stringstream 和 read_json 一起使用?

在没有外部函数的情况下重现atoi()

error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LP

为啥字符串函数有一些参数作为 const char *(指向常量字符的指针)?

为啥我不能将 const 左值引用绑定到返回 T&& 的函数?

为啥不能将 const set<Derived*> 作为 const set<Base*> 传递给函数?