atoi()转换错误

atoi() conversion error

本文关键字:错误 转换 atoi      更新时间:2023-10-16

atoi()给了我这个错误:


error C2664: 'atoi' : cannot convert parameter 1 from 'char' to 'const char *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

从此行:int pid=atoi(令牌.at(0));其中token是矢量

我该怎么绕过这个?

token.at(0)返回单个字符,但atoi()需要一个字符串(指向字符的指针)。将单个字符转换为字符串,或将单个数字字符转换为它所代表的数字,您通常可以*这样做:

int pid = token.at(0) - '0';

*例外情况是字符集没有按顺序编码数字0-9,这种情况极为罕见

您必须创建一个字符串:

int pid = atoi(std::string(1, token.at(0)).c_str());

假设token是一个char的std::向量,并使用std::string的构造函数接受一个字符(以及字符串将包含的字符数,在本例中为一)。

您的示例是不完整的,因为您没有说明向量的确切类型。我假设它是std::vector<char>(也许,您用C字符串中的每个字符填充)。

我的解决方案是在char*上再次转换它,这将给出以下代码:

void doSomething(const std::vector & token)
{
    char c[2] = {token.at(0), 0} ;
    int pid   = std::atoi(c) ;
}

请注意,这是一个类似C的解决方案(即,在C++代码中相当难看),但它仍然是有效的。

const char tempChar = token.at(0);
int tempVal = atoi(&tempChar);
stringstream ss;
ss << token.at(0);
int pid = -1;
ss >> pid;

示例:

#include <iostream>
#include <sstream>
#include <vector>
int main()
{
  using namespace std;
  vector<char> token(1, '8');
  stringstream ss;
  ss << token.at(0);
  int pid = -1;
  ss >> pid;
  if(!ss) {
    cerr << "error: can't convert to int '" << token.at(0) << "'" << endl; 
  }
  cout << pid << endl;
  return 0;
}