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

C语言将argv赋值给数组时报assignment to expression with array type错误如何解决

报错原因
  1. 类型不匹配:你定义的networks是二维数组unsigned char networks[argc][4],networks[i]代表第i个长度为4的unsigned char数组,C语言中数组名是不可修改的左值,不能直接给整个数组赋值。你将atoi()返回的int值直接赋值给数组类型的networks[i],自然触发assignment to expression with array type报错。
  2. 逻辑错误:argv[0]存储的是当前程序的调用路径,你要处理的是用户传入的参数,应该从下标i=1开始遍历;同时atoi()只能将整个字符串转为整数,无法拆分类似192.168.1.2这种带分隔符的IP地址为4个分段,不符合你注释中标注的「存储4字节网络地址」的需求。
解决方法

场景1:存储IPv4格式的网络地址

如果你需要把命令行传入的多个IPv4地址拆分为4个unsigned char分段存储,直接用sscanf格式化拆分字符串即可,修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv){
    if(argc == 1)
    {
        printf("ERROR ERROR, you messed up: 请传入至少一个IPv4地址参数\n");
        return 1;
    }
    // 二维数组存储多组4字节网络地址,排除argv[0]所以长度是argc-1
    unsigned char networks[argc-1][4];

    // 从i=1开始遍历,处理用户传入的参数
    for (int i = 1; i < argc; ++i){
        int seg[4];
        // 匹配四个用.分隔的整数
        int parse_ret = sscanf(argv[i], "%d.%d.%d.%d", &seg[0], &seg[1], &seg[2], &seg[3]);
        if(parse_ret !=4){
            printf("第%d个参数格式非法,不是合法IPv4地址\n", i);
            return 1;
        }
        // 转为unsigned char存入数组
        for(int k=0;k<4;k++){
            networks[i-1][k] = (unsigned char)seg[k];
        }
        // 打印验证
        printf("第%d个地址:%hhu.%hhu.%hhu.%hhu\n", i, networks[i-1][0], networks[i-1][1], networks[i-1][2], networks[i-1][3]);
    }
    return 0;
}

场景2:仅存储单个整数值

如果你只是需要把每个命令行传入的整数字符串转为单个unsigned char存储,不需要4字节分段,直接把二维数组改为一维数组即可:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv){
    if(argc == 1)
    {
        printf("ERROR ERROR, you messed up");
        return 1;
    }
    // 定义一维数组存储每个参数转换后的char值
    unsigned char networks[argc];
    for (int i = 1; i < argc; ++i){
        networks[i] = (unsigned char)atoi(argv[i]);
        printf("\t%hhu\n", networks[i]);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 12:06:03