使用getopt()时分配optarg时出错()

问题描述:

我在将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

此:

getopt(argc, argv, "ioxy") 

告诉getopt()约四个选项,ioxy,其中没有一个带参数。这就是为什么从optarg获得这些参数的任何尝试都失败了,因为它们不在那里。

你需要的是:

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

告诉getopt()io选项应该具有参数