gpt4 book ai didi

c - 从 argv 到 execvp

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

所以我有一个我无法解决的问题。我正在编写一个 C 程序,它通过管道执行一些操作系统功能。执行是通过 execvp(const char *file, char *const argv[]); 完成的。

在我的主函数中,我想将传递给程序 (argv) 的整行(第一个字符数组除外)传递给 grep。目前一切正常,但我不断收到警告:

warning: initialization from incompatible pointer type [enabled by default]
const char* grep = argv;
^

我的代码如下所示。在条款 if(1 < argc)我希望能够发送 argv第一篇文章修改为newPipeline格式与 printenv、sort 和 less 相同。

int main(int argc, char** argv, char **envp){

const char* printenv[] = {"printenv", NULL, NULL};
const char* sort[] = {"sort", NULL, NULL};
const char* less[] = {"less", NULL, NULL};
if(1<argc){
argv[0] = "grep";
const char* grep = argv;
const char* const* commands[] = {printenv, sort, grep, less, NULL};
newPipeline((char* const**)commands, 0, STDIN_FILENO);
}
//FROM HERE ON IT WORKS
else{
const char* const* commands[] = {printenv, sort, less, NULL};
newPipeline((char* const**)commands, 0, STDIN_FILENO);
}
if(signal(SIGCHLD, SIG_IGN) == SIG_ERR){
perror("A problem with the children");
}
exit(0);
}

我知道指针类型是错误的。我应该为 grep 建立一个全新的数组吗?或者我应该像我现在尝试做的那样,将指针转换为正确的指针类型。如果是后者,那将是哪些指针?

最佳答案

您的 grep 变量需要是指向字符串数组或字符串数​​组(不仅仅是字符串)的指针。

类似于:

argv[0] = "grep";
const char** grep = (const char**)argv; //make grep point to the modified char** argv;

应该这样做,或者构造一个新数组:

const char* grep[argc+1]; 
grep[0] = "grep";
grep[argc]=NULL;
for(int i=1; i<argc; i++){
grep[i] = argv[i];
}

顺便说一句,我相信你只需要在每个字符串数组的末尾有一个 NULL

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

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