2014-10-22 40 views
0

我在將optarg分配給inFilenameoutFilename時遇到問題。該錯誤指出發生了不兼容的類型錯誤。請原諒我,如果這是一個微不足道的錯誤,我已經在一週前開始學C了。使用getopt()時分配optarg時出錯()

編輯:我用strncpy,但得到分段錯誤。

編輯:這是我計劃如何使用此:

./sortfile -i input.txt中-o output.txt的

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

下面是修改之前的程序。這個程序有效。

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'這裏沒有 – 2014-10-22 04:12:05

+0

定義@self噢,對不起,c定義,但由於我的主要方法很長,我只發佈相關部分。如果需要,我可以發佈整個事情。 – mrQWERTY 2014-10-22 04:17:38

+0

你不能像C那樣分配數組,你必須使用'strcpy()'或朋友。 – 2014-10-22 04:19:33

回答

3

此:

getopt(argc, argv, "ioxy") 

告訴getopt()約四個選項,ioxy,其中沒有一個帶參數。這就是爲什麼從optarg獲得這些參數的任何嘗試都失敗了,因爲它們不在那裏。

你需要的是:

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

告訴getopt()io選項應該具有參數