我尝试使用 execvp,它运行良好,但现在我偶然发现了声明参数的方法,现在我得到“错误地址”作为错误。 我遇到了很多相同的问题,问题是最后一个参数为 NULL。
我尝试了很多方法在末尾附加 NUll 但它不起作用。
char *args4exec[5];
switch(argsi)
{
case 1:
printf("case 1 arg\n" );
strcpy(&args4exec[0],command);
strcpy(&args4exec[1],args[i-1]);
args4exec[2] = NULL;
break;
case 2:
printf("case 2 args\n" );
strcpy(&args4exec[0],command);
strcpy(&args4exec[1],args[i-2]);strcpy(&args4exec[2],args[i-1]);
strcpy(&args4exec[3], NULL);
break;
}
}
if (execvp( args4exec[0], args4exec) == -1 )
perror("exec failed");
strcpy 和正常定义不起作用,有人可以帮助我吗? 我发布的代码不起作用,但它应该显示我尝试添加 NULL 的方式。
最佳答案
在将您的命令
或其他字符串复制到args4exec
之前,您应该为其分配内存:
char *args4exec[5];
char *command = "Hello";
args4exec[0] = malloc(sizeof(char) * strlen(command));
此外,您的 strcpy()
编译器应该对此发出警告。应该是这样的:
strcpy(args4exec[0], command);
如果你使用 gcc
编译 -Wall -Wextra -Werror
。
并且您应该检查您的 args[i - 2]
和其他参数以确保它们存储正确的值并且没有超出范围。
关于c - exec 错误地址,NULL addet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53013278/