MySQL C API的一个让我头疼的问题,获得一行记录中包括NULL
你看到的这个文章来自于http://www.cnblogs.com/ayanmw
遇到过几次错误,通过gdb来查看错误对战,发现错误居然是atoi调用出错,除非atoi(NULL) 才会报这种错误.说明 row[0]==NULL.
(gdb) bt #0 0x00007f82c6629132 in ____strtoll_l_internal () from /lib64/libc.so.6 #1 0x00007f82c6625ee0 in atoi () from /lib64/libc.so.6 #2 0x0000000000438c7b in MySQL_Util::select_one ( sql_string=0x7f82c4544190 "select sum(pointcoupon_added) from tb_recharge_records where user_id=214873 and status=0 and method=0 ", get_data=0x7f82c4544598, length=4, data_type=MYSQL_INT, pmysql=0x7f82c4545210) at MySQL_Util.hpp:177
好无语啊,SQL语句中包括 sum() max() count(),及时没有返回值,也会执行到 这里面:
MYSQL_RES *res = NULL; MYSQL_ROW row = NULL; res=mysql_store_result(pmysql); if( (row=mysql_fetch_row(res) )!=NULL ) { // atoi(row[0]) }else{ nReturn=MYSQL_SQL_FAILED; } mysql_free_result(res); row=NULL;
NULL也会返回一行记录,真是够恶心的啊!只能判断 if(row[0]!=NULL) XXX=atoi(row[0]);
或许 atoi重新定义下 就好了:
static inline int mystrlen(char *str){//const if(str==NULL) return 0; else return strlen(str); } static inline int myatoi(char * str){ if(str==NULL) return 0; else return atoi(str); }
类似的还有strlen(NULL)也会报错,一起改了.
转载请注明出处:http://www.cnblogs.com/ayanmw 我会很高兴的!
------------------------------------------------------------------------------------------------
一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步