Ошибка преобразования 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
Мое решение состояло бы в том, чтобы преобразовать это снова в 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;
}