atoi()转换错误

时间:2008-10-11 05:47:24

标签: c++ atoi

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(token.at(0)); 其中token是向量

我怎么能绕过这个?

5 个答案:

答案 0 :(得分:10)

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

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

*例外情况是charset不按顺序编码数字0-9,这是非常罕见的。

答案 1 :(得分:3)

您必须创建一个字符串:

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

...假设该标记是char的std :: vector,并使用std :: string的构造函数接受单个字符(以及该字符串将包含的字符数,在本例中为1)。 / p>

答案 2 :(得分:1)

您的示例不完整,因为您没有说明矢量的确切类型。我假设它是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 ++代码中非常难看),但它仍然有效。

答案 3 :(得分:1)

const char tempChar = token.at(0);
int tempVal = atoi(&tempChar);

答案 4 :(得分:0)

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;
}