我们使用命令行参数时会发生什么的内存映射?

时间:2016-03-09 08:33:58

标签: c++ c pointers

据我所知,argc拥有参数总数。假设我的程序除程序名之外还有1个参数。现在argv持有什么?两个指针,例如:123,130或./hello \ 0和5.如果它持有123,它怎么知道它已读取一个参数?它是否因为\ 0而知道。

如果以上都是错误的,有人可以帮我理解使用记忆图。

1 个答案:

答案 0 :(得分:1)

argv数组是一个字符串数组(其中数组中的每个条目都是char*类型)。每个char*数组本身都是NUL终止的。 argv数组本身不需要以NULL结尾(这就是使用单独的argc变量来跟踪argv数组的长度的原因。)

就那些开始构造的数组而言,这取决于调用程序。通常,调用程序是一个shell程序(例如BASH),其中参数通过空格分隔(可使用各种引用选项以允许参数包含空格)。无论如何构造argcargv参数,操作系统都提供用于执行程序的例程作为程序输入(例如,在UNIX上,该方法是{{的各种变体之一) 1}},通常与对exec)的调用配对。

为了使这更具体一点,假设你跑了:

fork

以下是一个如何在内存中查看的示例(使用完全虚假的地址):

./myprog "arg"