C 叉管问题-无限打印

C 叉管问题-无限打印,c,pipe,C,Pipe,在int main()中启动此代码后: 最终,我的终端上不断打印出无限量的“>>>>>>>>>>>>(…)”。我怎样才能解决这个问题呢?Per(我的加粗): intexecv(constchar*path,char*constargv[]) 参数argv是指向以null结尾的字符指针数组 字符串应用程序应确保 数组是空指针。 这不符合以下条件: char *argv[2]; argv[0] = "wc"; argv[1] = "0"; “0”不是“空指针”。您正在将包含字符串“0”的字符串文

在int main()中启动此代码后:

最终,我的终端上不断打印出无限量的“>>>>>>>>>>>>(…)”。我怎样才能解决这个问题呢?

Per(我的加粗):

intexecv(constchar*path,char*constargv[])

参数
argv
是指向以null结尾的字符指针数组 字符串应用程序应确保 数组是空指针。

这不符合以下条件:

char *argv[2];
argv[0] = "wc";
argv[1] = "0";
“0”
不是“空指针”。您正在将包含字符串
“0”
的字符串文本的地址分配给
argv[1]
。由于数组的最后一个成员不是“空指针”,因此您正在调用未定义的行为。

Per(粗体):

intexecv(constchar*path,char*constargv[])

参数
argv
是指向以null结尾的字符指针数组 字符串应用程序应确保 数组是空指针。

这不符合以下条件:

char *argv[2];
argv[0] = "wc";
argv[1] = "0";

“0”
不是“空指针”。您正在将包含字符串
“0”
的字符串文本的地址分配给
argv[1]
。由于数组的最后一个成员不是“空指针”,因此您正在调用未定义的行为。

谢谢您的回答!这是一个小例子,因为我正在构建自己的shell,实现管道是我最后要做的事情。我反复地做。在这个小示例中,更改argv[1]=NULL;那么你应该解决这个问题吗?试过了,还是很奇怪。虽然在主程序中,我已经有了正常运行的管道,但改为“execvp(args[0],args)”,我也遇到了同样的问题。其中:字符**args,cpy[1000];args=calloc((spacecount)+2,sizeof(char*);对于(c=0;cdup2()
而不是
close()
dup()
。虽然它对您的问题不负责,但我强烈建议使用
dup2()
而不是
close()
+
dup()