gpt4 book ai didi

c - argv 的双指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:42 25 4
gpt4 key购买 nike

我正在尝试为一个新进程创建 argv(尝试使用 execvp),我查看了 execvp 手册页,上面说它需要 char *const argv[]。

我假设这是一个指向 char 指针数组的指针。那么是否可以将 char 的双指针传递给该参数?

基本上,我想做的是如下(argvcounter 是参数的数量。例如)cat a -> argvcount = 2)

int argvcount;
char **argv;
...
argv = malloc(sizeof(char*)*(argvcount+1));
for (int i = 0; i<argvcount; i++){
argv[i] = some char pointer;
}
argv[-1] = NULL;

我也不确定最后一行。我将最后一个元素设置为 NULL,因为参数数组的最后一个元素必须为 NULL。

是否可以将此 argv 传递给 execvp?

谢谢。

最佳答案

根据 C 标准(5.1.2.2.1 程序启动,p.#2)

— argv[argc] shall be a null pointer

所以你必须写

argv[argvcount] = NULL; 

这个声明

argv[-1] = NULL; 

没有意义并导致未定义的行为。

I assume this is an pointer to array of char pointers. So is it possible to pass double pointer of char to this argument?

除了极少数异常(exception),数组指示符被隐式转换为指向其第一个元素的指针。

例如,如果你有这样一个数组

char * argv[argvcount];

然后传递给一个函数,它被转换为指向其第一个元素的指针,类型为 char **

另一方面,这些函数声明

void f( char *a[] );

void f( char **a );

是等价的,因为编译器将声明为数组的参数类型调整为指向数组元素类型对象的指针类型。

关于c - argv 的双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56627838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com