我知道我们使用这个论点,我甚至知道如何处理这个论点。
只有一件事我还是不明白。程序如何为来自输入的字符串分配内存。 ** argv在程序开始时没有分配内存,不是吗?我期待段错误,但它没有发生。
有人知道这种内存分配是如何工作的吗?
答案 0 :(得分:12)
C / C ++运行时处理命令行参数并创建放置参数的内存区域。然后它会调用你的main()
,为你提供一个参数个数以及一个指向存储参数的区域的指针。
因此,C / C ++运行时拥有已分配的内存区域,一旦您的main()
返回或者如果使用某些其他C / C ++函数来停止程序,则由C / C ++运行时取消分配区域例如exit()
。
这个程序起源于在Unix下使用C,并且是为了提供C ++委员会试图维护的向后兼容程度的一部分而保留给C ++。
通常,当您的程序加载时,加载程序启动的入口点不是您的main()
函数,而是C / C ++运行时中定义的入口点。 C / C ++运行时执行各种初始化以设置C / C ++标准所说的环境,当初始化完成后,当C / C ++运行时调用main()
函数时,该环境将存在。
此初始化过程中的一个步骤是解析所提供的命令行参数,然后将其作为函数参数提供给main()
函数。