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是向量
我怎么能绕过这个?
答案 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;
}