You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:08