C 程序如何在运行时获取命令行参数?

Nas*_*oor 1 c

我知道 C 程序可以从外部(从命令行)传递参数,例如

gcc.exe -std=c++17 -o fileName 
Run Code Online (Sandbox Code Playgroud)

通过将函数声明main为带参数

int main(int argc, char* argv[])
Run Code Online (Sandbox Code Playgroud)

我的问题是,这些字符串存储在哪里?在 C 中,不是应该在编译时知道数组的大小。您可以向程序传递很多很多参数(字符串),或者根本不传递。但是程序已经被编译成一个可执行文件——它不能比它已经占用更多或更少的内存。或者这个内存是动态分配的?

Jos*_*hua 5

在 DOS 上,字符串存储在 __psp:128(__psp 通常是 DS,但不一定是)。

在 Windows 上,字符串存储在堆中。原始命令行存储在具有非常低地址的内存块中。

在 Linux 上,字符串存储在堆栈的底部。