2014-10-22 2 views
0

inFilenameoutFilename에 optarg를 할당하는 데 문제가 있습니다. 오류는 호환되지 않는 유형 오류가 발생했음을 나타냅니다. 이게 사소한 실수라면 용서해주세요, 일주일 전에 C를 배우기 시작했습니다.getopt() 사용시 문제가되는 optarg

편집 : 나는 strncpy를 사용했지만 세분화 오류가 발생했습니다.

편집 : 여기 내가이를 사용하여 계획하는 방법입니다

./sortfile -i input.txt를 -o

 int main(int argc, char *argv[]) { 
     char c; 

     const int MAX_FILENAME_LEN = 256; 
     const int MAX_NUMBERS  = 100; 

     int xFlag = 0; 
     int yFlag = 0; 

     char inFilename[MAX_FILENAME_LEN]; 
     char outFilename[MAX_FILENAME_LEN]; 
     int *numbers; // number array: to be dynamically allocated 
     int count; 
     int exitValue = 1; 

     //printf("Enter the input file name: "); 
     //scanf("%s", inFilename); 

     while ((c = getopt(argc, argv, "ioxy")) != -1) { 
       switch (c) { 
         case 'i': 
           strncpy(inFilename, optarg, sizeof(inFilename) - 1); 
           break; 
         case 'o': 
           strncpy(outFilename, optarg, sizeof(outFilename) - 1); 
           break; 
         case 'x': 
           xFlag = 1; 
           break; 
         case 'y': 
           yFlag = 1; 
           break; 
         case '?': 
           fprintf(stderr, "Unrecognized option!\n"); 
           break; 
       } 
     } 

     if (!inFilename || !outFilename) { 
       fprintf(stderr, "Must have -i and -o option!\n"); 
       exit(0); 
     } 


     numbers = (int *) malloc(MAX_NUMBERS * sizeof(int)); 

     count = readNumbers(numbers, inFilename); 

     if (count >= 0) { 
       //printf("Enter the output file name (will be created/overwitten): "); 
       //scanf("%s", outFilename); 

       printArray(numbers, count); 
       bubbleSort(numbers, count, true); 

       printArray(numbers, count); 
       writeNumbers(numbers, count, outFilename); 
     } 

     free(numbers); 

     return exitValue; 
} 

OUTPUT.TXT 여기 변경하기 전에 프로그램입니다. 이 프로그램은 작동합니다.

int main(void) { 
const int MAX_FILENAME_LEN = 256; 
const int MAX_NUMBERS  = 100; 

char inFilename[MAX_FILENAME_LEN]; 
char outFilename[MAX_FILENAME_LEN]; 
int *numbers; // number array: to be dynamically allocated 
int count; 
int exitValue = 1; 

printf("Enter the input file name: "); 
scanf("%s", inFilename); 


numbers = (int *) malloc(MAX_NUMBERS * sizeof(int)); 

count = readNumbers(numbers, inFilename); 

if (count >= 0) { 
    printf("Enter the output file name (will be created/overwitten): "); 
    scanf("%s", outFilename); 

    printArray(numbers, count); 
    bubbleSort(numbers, count, true); 

    printArray(numbers, count); 
    writeNumbers(numbers, count, outFilename); 

    exitValue = 0; 
} 


free(numbers); 

return exitValue; 

}

+0

는'c' 여기 –

+0

정의되지 않은 @self 아 미안, C가 정의 인수를해야 getopt()하지만 이후에게 내 주요 방법은 매우 길고, 관련 부분 만 게시했습니다. 필요한 경우 게시 할 수 있습니다. – mrQWERTY

+0

C와 같은 배열에는 할당 할 수 없기 때문에'strcpy()'또는 친구를 사용해야합니다. –

답변

3

이 :

getopt(argc, argv, "ioxy") 

이 인수를 어느 것도 getopt()에 대한 네 가지 옵션, i, o, xy을 알려줍니다. 그렇기 때문에 그러한 인수를 얻으려는 시도가 모두 존재하지 않기 때문에 optarg에서 실패하는 것입니다.

당신이 필요로하는 것은 :

getopt(argc, argv, "i:o:xy") 

io 옵션