2010-12-28 4 views
1

$ ./Main theMenu 함수에서는기본 명령 행 인수

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);} 

, I는 STRCMP을 호출하면 (는 argv [2]는 argv [3]); 나는 세그먼트 오류를해야합니다 : ((

을 내가 할 수있는 방법 ARGV [X] = x는 당신은 당신이 할 수있는 것은 정의

답변

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

"CRT는 수신하지 못한 인수에 대해 NULL 항목을 삽입하지 않습니다."그러나 마지막 인수 인 'argv'뒤에 항상 하나의 요소가 있음을 확인하십시오 'argv [argc] == NULL'과 같은'NULL '을 포함하고 있습니다. (이것은 분명히 단지 질질 마냥하다, 나는 실제로 너를 upvoted) –

2

입니다 수 없습니다에서 사용자가 매개 변수를 입력하지 않은 경우 "널".? 크기의 자신의 배열 [4] 빈 문자열 또는 널 (NULL)에 초기화가 (는 argc 수까지) 인수를 복사

+0

+1 문제를 설명하고 해결책을 제안하십시오. –

1

당신은 4 개 인수과 같이 왜 함정을 기대하고 있습니다 :..

if (argc==5) 
{ 
//code here 
} 

을 (코드를 실행할 때 arg [0]이 있기 때문에 5입니다)

1

귀하의 문제는 5 < ARGC 그래서 당신이 정의되지 않은 변수는 argv의 요소에 액세스하려고하는 것입니다.