$ ./Main a
int main(int argc, char * argv[]) {
int i;
for(i=1;i<argc;i++){
if(argv[i] == NULL){ //This line does not work!
argv[i] = "Null";
}
}
theMenu(argv[1], argv[2], argv[3], argv[4]);
return (EXIT_SUCCESS);}
在theMenu函数中,当我调用strcmp(argv [2],argv [3]);我将有分段错误:((
当用户未在x处输入参数时,如何使argv [x] =“Null”?
答案 0 :(得分:4)
CRT不会为您未收到的参数插入NULL条目。它只会降低argc的值。如果必须有四个参数,那么可以在堆栈上定义自己的数组。
int main(int argc, char * argv[]) {
char* args[4] = { 0 };
int i;
for(i=1;i<argc && i < 4;i++){
args[i] = argv[i];
}
for(int i = 0; i < 4; i++) {
if (args[i] == NULL)
args[i] = "Null";
}
theMenu(argv[1], argv[2], argv[3], argv[4]);
return (EXIT_SUCCESS);
}
答案 1 :(得分:2)
你做不到。你可以做的是定义你自己的大小[4]数组,初始化为空字符串或NULL,并复制参数(最多argc计数)。
答案 2 :(得分:1)
你期待4个论点。为什么不像这样陷阱:
if (argc==5)
{
//code here
}
(它是5,因为运行代码时有一个arg [0])
答案 3 :(得分:1)
你的问题是argc&lt; 5所以你试图访问未定义的argv元素。