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)); где токен - это вектор
как я могу это обойти?





Вам нужно будет создать строку:
int pid = atoi(std::string(1, token.at(0)).c_str());
... предполагая, что токен является std :: vector of char, и используя конструктор std :: string, который принимает один символ (и номер этого символа, который будет содержать строка, в данном случае один).
В противном случае: количество символов и символ. Но в остальном ты прав, Лев.
token.at (0) возвращает один символ, но atoi () ожидает строку (указатель на символ). Либо преобразовать один символ в строку, либо преобразовать одну цифру char в число, которое он представляет. Обычно * может просто сделать это:
int pid = token.at(0) - '0';
* The exception is when the charset doesn't encode digits 0-9 in order which is extremely rare.
Любое исключение также будет несовместимым. Стандарт C++ [lex.charset] требует, чтобы «0» - «9» имели последовательные числовые значения.
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;
}
Ваш пример неполный, так как вы не указываете точный тип вектора. Я предполагаю, что это 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);
насколько я помню, это std :: string (token.at (0), 1)