使用MYSQL C API时如何将MYSQL_ROW的row[0]值转换为int类型
实现方法
MySQL C API返回的MYSQL_ROW中所有字段的内容都是以char*类型的空终止字符串存储的,即使数据库里的字段是整数类型,也不会直接返回数值类型,所以不能直接赋值给int变量,需要先完成字符串到整数的类型转换。
代码修改方案
你只需要修改sr_nos[k] = row[0];这一行的逻辑,补充字符串转整数的处理即可,以下是两种可选方案:
方案1:简单写法(适用于确定返回内容一定是合法整数的场景)
直接调用标准库的atoi函数转换即可:
sr_nos[k] = atoi(row[0]);
方案2:安全写法(带错误校验,推荐使用)
使用strtol函数做转换,同时校验转换是否合法,避免非法内容导致异常:
// 先判断row是否为空,防止结果集无数据时报错 if (row == NULL || row[0] == NULL) { printf("当前行无有效序号数据\n"); // 可根据业务需求添加错误处理逻辑 continue; } char *endptr = NULL; long int serial_val = strtol(row[0], &endptr, 10); // 校验:如果endptr等于原字符串说明没识别到数字,endptr没到字符串末尾说明包含非数字字符 if (endptr == row[0] || *endptr != '\0') { printf("序号格式非法:%s\n", row[0]); continue; } // 转换为int存入数组 sr_nos[k] = (int)serial_val;
额外优化建议
- 你当前的代码没有对
k的值做边界判断,当查询结果超过1024条时会出现数组越界,建议在k++前添加判断,当k >= 1024时跳出循环。 - 调用
mysql_fetch_row之后必须先判断返回的row是否为NULL,否则当结果集为空时访问row[0]会触发空指针崩溃。
内容的提问来源于stack exchange,提问作者user1743h
相关产品推荐
相关产品推荐

