我有一个问题转换一个char* 到一个64位机器的am int.我知道这个问题是在64位sizeof(char*)是8和sizeof(int)是4.这里的代码:
void books::update()
{
int b_id[100],qty[100],i=0,max;
stmt.str("");
stmt<<" Select book_id,qty from purchase where recieves ='T' and inv IS NULL;";
query=stmt.str();
q =query.c_str();
mysql_query(conn,q);
res_set=mysql_store_result(conn);
stmt.str("");
stmt<<" Update purchases set inv=1 where recieves ='T' and inv is NULL";
query=stmt.str();
q=query.c_str();
mysql_query(conn,q);
while((row=mysql_fetch_row(res_set))!=NULL)
{
b_id[i]=(int)row[0];
qty[i]= (int)row[1];
i++;
}
max=i;
for(i =0;i<max;i++)
{
stmt.str("");
stmt<<" update books set qty ="<< qty[i]<<"where id = "<<b_id[i]<<";";
query= stmt.str();
q= query.c_str();
mysql_query(conn,q);
}
cout<<" The order recieved has been updated .";
}
错误在这两行中:
b_id[i]=(int)row[0];
qty[i]= (int)row[1];
我尝试使用(long)而不是(int),期望它将我的int从4字节转换为8字节,但我仍然得到相同的错误(从'char*'转换为'int'会丢失精度)
3条答案
按热度按时间sbdsn5lh1#
标准库有两个固定宽度的
typedef
,能够保存指向void
的指针,这些指针在<cstdint>
中定义:但是,不能通过强制转换将C字符串转换为整数。必须以某种方式解释C字符串。例如:
其他选项包括使用
std::stoi
或std::strtol
。例如:tyg4sfes2#
将所有地方的
int
更改为std::intptr_t
,包括数组声明。关于C++中整数类型的更多信息:https://en.cppreference.com/w/cpp/types/integer
wn9m85ua3#
您需要一个
long long
,而不是long
来执行转换。但我怀疑这根本不能解决您的问题。