c - C命令行参数中为argv分配的缓冲区大小
问题描述
当我们编写一个可以接受命令行参数的 C 程序时,我们将 main 函数编写为:
int main(int argc, char **argv) {
. . .
}
我们知道argc
大于等于1 所以,至少argv[0]
存在。我的问题是为argv[0]
和后续参数分配的缓冲区大小是多少,如果有的话argv[1]
,argv[2]
等等?
解决方案
我们知道 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]
表示程序参数。
推荐阅读
- javascript - 为什么在 AJAX 调用中无法访问 SESSION 变量?
- android - Firebase:一旦用户卸载应用 IOS 和 Android,我需要清理数据库
- python-3.x - python中的逻辑代码给出了错误的答案
- java - 无法启动 bean 'subProtocolWebSocketHandler';嵌套异常是 java.lang.IllegalArgumentException: No handlers
- awk - awk:为什么四舍五入不适用于范围?
- wordpress - 如何在 woocommerce 上调整产品图像的大小?
- jquery - 谷歌日历的倒计时
- odoo - Odoo - 服务未启动
- python-3.x - 使用装饰器为原始函数创建新参数时混淆设计模式
- javascript - 使用 Codeception/Selenium 测试工具提示/customValidity 消息?