据我所知,argc拥有参数总数。假设我的程序除程序名之外还有1个参数。现在argv持有什么?两个指针,例如:123,130或./hello \ 0和5.如果它持有123,它怎么知道它已读取一个参数?它是否因为\ 0而知道。
如果以上都是错误的,有人可以帮我理解使用记忆图。
答案 0 :(得分:1)
argv
数组是一个字符串数组(其中数组中的每个条目都是char*
类型)。每个char*
数组本身都是NUL终止的。 argv
数组本身不需要以NULL结尾(这就是使用单独的argc
变量来跟踪argv
数组的长度的原因。)
就那些开始构造的数组而言,这取决于调用程序。通常,调用程序是一个shell程序(例如BASH),其中参数通过空格分隔(可使用各种引用选项以允许参数包含空格)。无论如何构造argc
,argv
参数,操作系统都提供用于执行程序的例程作为程序输入(例如,在UNIX上,该方法是{{的各种变体之一) 1}},通常与对exec
)的调用配对。
为了使这更具体一点,假设你跑了:
fork
以下是一个如何在内存中查看的示例(使用完全虚假的地址):
./myprog "arg"