首页 > 解决方案 > C命令行参数中为argv分配的缓冲区大小

问题描述

当我们编写一个可以接受命令行参数的 C 程序时,我们将 main 函数编写为:

int main(int argc, char **argv) {
. . .
}

我们知道argc大于等于1 所以,至少argv[0]存在。我的问题是为argv[0]和后续参数分配的缓冲区大小是多少,如果有的话argv[1]argv[2]等等?

标签: ccommand-line-argumentsargvargc

解决方案


我们知道 argc 大于等于 1

好吧,那不是真的。它应该是非负的。也可以为 0。

如果argv[n]存在,则argv[n]的大小是您平台中指针的大小。指针指向的内存大小与提供的命令行参数字符串(由底层环境提供)相同。

引用C11,第 5.1.2.2.1 章

  • argc 的值应为非负数。

和,

  • 如果 的值argc大于零,则argv[0]通过 argv[argc-1]inclusive 的数组成员应包含指向字符串的指针,这些指针在程序启动之前由宿主环境赋予实现定义的值。目的是从托管环境中的其他地方向程序提供在程序启动之前确定的信息。[...]

  • 如果 的值argc大于零,则 指向的字符串argv[0] 代表程序名;argv[0][0]如果主机环境中没有程序名,则应为空字符。如果 argc 的值大于 1,则argv[1]through指向的字符串argv[argc-1] 表示程序参数


推荐阅读