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

如何获取C语言命令行参数argv各字符串的长度

获取命令行参数字符串长度的最优方案

场景说明

在命令行执行如下指令时:
./(file name) abcd efg hijkl
需要将各参数长度存储为整型值:

  • argv[1]对应字符串abcd,长度为4
  • argv[2]对应字符串efg,长度为3
  • argv[3]对应字符串hijkl,长度为5
    此前排查到的异常诱因是遗漏了<string.h>头文件的引入。

实现方法

直接使用C标准库提供的strlen()函数是最优方案:

  • argv传入的所有命令行参数都是以\0结尾的标准C字符串,完全匹配strlen的入参要求
  • 标准库的strlen实现针对不同硬件架构做了底层优化,性能远高于手写的字符遍历计数逻辑
  • 注意必须提前引入<string.h>头文件,漏引入时编译器会生成strlen的错误隐式声明,在64位环境下会出现指针截断、长度计算错误、段错误等异常问题。

示例代码

#include <stdio.h>
#include <string.h>  // strlen函数的声明所在头文件,不可遗漏

int main(int argc, char *argv[]) {
    // 从argv[1]开始遍历所有用户传入参数,argv[0]为程序自身名称
    for (int i = 1; i < argc; i++) {
        // strlen返回值为size_t无符号类型,强转为int存储即可
        int arg_len = (int)strlen(argv[i]);
        printf("argv[%d] 字符串:%s,长度:%d\n", i, argv[i], arg_len);
    }
    return 0;
}

运行示例命令时,程序输出如下:

argv[1] 字符串:abcd,长度:4
argv[2] 字符串:efg,长度:3
argv[3] 字符串:hijkl,长度:5

补充注意点

  • argv数组的最后一个元素固定为NULL,也可以通过判断指针是否为NULL的方式遍历所有参数,不依赖argc传入的参数个数
  • 当单个参数长度超过int类型的取值上限时,不建议强转为int存储,直接使用size_t类型接收长度值更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:36:36