事情由一次sql插入语句开始,我写了一个函数getsqlcmd(),这个函数的作用是将要插入数据库的各个字段以参数的形式传递进来进行字符串拼接,然后返回一个完整可用的sql语句,这个函数在我的电脑上是完全可用的,但是之前有一次我把它scp到师兄的虚拟机上,然后进行测试的时候发现插入的语句会被数据库拒绝,报出‘违反字段非空约束’,拼接的代码段大致如下:
string getsqlcmd(const char ** paras){
string cmd;
int sometings_id=atoi(paras[1]);
cmd=”insert into PACKEGE values(NULL,0,”;
cmd+=paras[0]+”,\’”;
cmd+=sometings_id+”\’);”
return cmd;
}
在我的笔记本上运行时,paras[1]传入0,则拼接出来的字符串是这样的:insert into package values(NULL,0,0,’0’);
而师兄的虚拟机中的输出结果却是这样的:insert into package values(NULL,0,0,’’);
可见完全一样的代码在两种环境下结果却不一样,应该是师兄的虚拟机中编译器是在string+int时将这个int作为asc码的char类型进行处理的。