You need to enable JavaScript to run this app. C语言中将字符串转整数存入int**类型变量不报转换警告的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

C语言中将字符串转整数存入int**类型变量不报转换警告的实现方法

问题原因

int** 本质是指向int类型指针的指针,你申请的num_list是一个长度为10的数组,数组里每个元素num_list[i]的类型是int*(int类型指针),而atoi()的返回值是int类型的整数值,直接将int值赋值给指针类型变量,就会触发你收到的类型不匹配警告。你需要先为每个int值申请独立的内存空间,再让num_list[i]指向该空间,最后把转换后的整数存入对应的内存地址中。

正确实现代码
#include <stdlib.h>

int main() {
    // 外层申请10个int*类型的空间,和你的原有逻辑一致
    int** num_list = malloc(10 * sizeof(int*));
    if (num_list == NULL) {
        // 内存申请失败处理,可根据自己的需求调整
        return 1;
    }

    for(int i = 0; i < 10; i++) {
        // 先为每个int值申请内存空间
        num_list[i] = malloc(sizeof(int));
        if (num_list[i] == NULL) {
            // 申请失败时要释放已经申请的内存,避免内存泄漏
            for(int j = 0; j < i; j++) {
                free(num_list[j]);
            }
            free(num_list);
            return 1;
        }
        // 解引用指针,把转换后的整数存入对应的内存地址
        *num_list[i] = atoi("1234");
    }

    // 业务逻辑使用阶段,例如要读取第i个值直接用*num_list[i]即可
    // ...

    // 释放内存的正确顺序:先逐个释放内层的int空间,再释放外层的指针数组
    for(int i = 0; i < 10; i++) {
        free(num_list[i]);
    }
    free(num_list);

    return 0;
}
注意事项
  • 如果需要读取存储的整数值,直接对num_list[i]解引用即可,即*num_list[i]
  • 若输入的字符串可能存在非合法整数的场景,建议使用strtol()替代atoi()做转换,可以做异常校验,避免未定义行为
  • 务必按照先释放内层元素、再释放外层数组的顺序释放内存,否则会出现内存泄漏

内容的提问来源于stack exchange,提问作者tenepolis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 11:48:04