Ошибка преобразования 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)); где токен является вектором

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

5 ответов

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

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

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

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

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

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

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

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

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

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

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

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;
}
Другие вопросы по тегам