atoi()转换错误
atoi() conversion error
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));其中token是矢量
我该怎么绕过这个?
token.at(0)返回单个字符,但atoi()需要一个字符串(指向字符的指针)。将单个字符转换为字符串,或将单个数字字符转换为它所代表的数字,您通常可以*这样做:
int pid = token.at(0) - '0';
*例外情况是字符集没有按顺序编码数字0-9,这种情况极为罕见
您必须创建一个字符串:
int pid = atoi(std::string(1, token.at(0)).c_str());
假设token是一个char的std::向量,并使用std::string的构造函数接受一个字符(以及字符串将包含的字符数,在本例中为一)。
您的示例是不完整的,因为您没有说明向量的确切类型。我假设它是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);
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;
}
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- C++使用params创建线程函数会导致转换错误
- 在混合代码库中将C转换为C++时出现许多包含错误
- 为什么g++在未执行的代码处标记强制转换错误
- 错误:从"int"到枚举c++的转换无效
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 从标准::未来<void>到非标量标准::未来<bool>引发的错误转换
- 使用宏的错误转换
- 在 opencv 中使用 Color_YUV2BGR 从 YUV 到 BGR 的错误转换
- 无法通过此操作,因为类型的错误转换
- PyQt5:使用自定义信号时 int 对象的错误转换
- 从长途错误转换
- C 错误:转换为非量表类型
- C 错误:转换为执行字符集
- 使用SOCI从PostgreSQL数据库获取数据时发生错误转换
- 分段错误C++转换问题
- 在ARM上的Qt中从双精度到QString的错误转换
- C++浮点转换为Python浮点错误转换
- 错误:转换为非标量类型