运行C可执行文件时argv [0]的确切值

时间:2015-09-05 03:55:47

标签: c pointers

假设我有以下C文件,我将其编译为可执行文件test

#include <stdio.h>

int main(int argc, char **argv) {
    // do some computation
}

假设我使用调用./test foo从命令行调用此二进制文件。那时,argv[0]的值是否等于"foo",还是等于内存中的某个地址?

2 个答案:

答案 0 :(得分:4)

argv[0]将地址保存在字符串“./test”的内存中。 argv[1]将保存字符串“foo”的内存地址。

char*是指向单个字符的指针。您可以将该指针指向一个字符,就像它是一个字符串一样(如果数据是NUL终止的话,更容易)。但它的核心是一个指向包含字符数据的内存的指针。

char**是指向char*的指针。在这种情况下,我们将char**视为char*的数组。但实际上它只是一个指向内存地址的指针,该地址包含char*

答案 1 :(得分:1)

argc值和argv[] char指针数组以及argv[]指针指向的字符串都在readonly内存中。所以不要试图以任何方式修改它们。

argv[0]是指向字符串的char指针。 字符串内容为:"test",包括尾随'\0'

argv[1]是指向字符串的char指针。 字符串内容为:"foo",包括尾随'\0'

argv[2]是一个char指针。 该指针将包含NULL

argc是一个整数。 该整数将包含2。 因为argc包含argv[]数组中有效指针数的计数 (最终的NULL指针不计算在内)