ошибка преобразования atoi () - PullRequest
3 голосов
/ 11 октября 2008

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)); где токен является вектором

как я могу обойти это?

Ответы [ 5 ]

10 голосов
/ 11 октября 2008

token.at (0) возвращает одиночный символ, но atoi () ожидает строку (указатель на символ) это означает, что вы обычно можете * просто сделать это:

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

* Исключение составляют случаи, когда кодировка не кодирует цифры 0-9 в порядке, который встречается крайне редко.

3 голосов
/ 11 октября 2008

Вам нужно будет создать строку:

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

... предполагая, что токен является std :: vector символа char, и используя конструктор std :: string, который принимает один символ (и номер того символа, который будет содержать строка, в данном случае один).

1 голос
/ 20 февраля 2012
const char tempChar = token.at(0);
int tempVal = atoi(&tempChar);
1 голос
/ 11 октября 2008

Ваш пример неполон, так как вы не говорите точный тип вектора. Я предполагаю, что это std :: vector (что, возможно, вы заполнили каждым символом из строки C).

Мое решение состоит в том, чтобы преобразовать его снова на char *, что даст следующий код:

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

Обратите внимание, что это решение типа C (то есть довольно уродливое в коде C ++), но оно остается эффективным.

0 голосов
/ 11 октября 2008
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;
}
...