如何获取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
相关产品推荐
相关产品推荐

