使用getopt()时分配optarg时出错()
问题描述:
我在将optarg分配给inFilename
和outFilename
时遇到问题。该错误指出发生了不兼容的类型错误。请原谅我,如果这是一个微不足道的错误,我已经在一周前开始学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;
}
答
此:
getopt(argc, argv, "ioxy")
告诉getopt()
约四个选项,i
,o
,x
和y
,其中没有一个带参数。这就是为什么从optarg
获得这些参数的任何尝试都失败了,因为它们不在那里。
你需要的是:
getopt(argc, argv, "i:o:xy")
告诉getopt()
您i
和o
选项应该具有参数
'C'这里没有 – 2014-10-22 04:12:05
定义@self噢,对不起,c定义,但由于我的主要方法很长,我只发布相关部分。如果需要,我可以发布整个事情。 – mrQWERTY 2014-10-22 04:17:38
你不能像C那样分配数组,你必须使用'strcpy()'或朋友。 – 2014-10-22 04:19:33