Я пытаюсь получить имена входных и выходных файлов с помощью аргументов командной строки. Я просто использую getopt (скажите мне, если есть лучший способ), и я получил segmentation fault
Ошибка сегментации при использовании аргументов командной строки
Я уверен, что ошибка сегментации вызвана именем входного файла. Что-то не так, когда я беру имя входного файла из командной строки.
Вот мой код:
int main (int argc, char **argv) {
char const *inFile = NULL; //I think the error is here
//an inFile that doesn't exist
//would cause a segmentation fault
char const *outFile = "outfile.txt";
double val;
int xFlg= 0;
int c;
char *rm; //I need this for strtod, but I can use atoi instead
while ((c = getopt (argc, argv, "xo")) != -1) {
switch (c) {
case 'x':
val = strtod(optarg, &rm);
xFlg = 1;
break;
case 'o':
outFile = optarg;
break;
default:
help(); //void function that prints help
return EXIT_FAILURE;
}
rm=NULL;
}
inFile = *(argv + optind);
fread code
.
.
.
call function
.
.
.
fwrite code
}
Я уверен, что нет никаких проблем с моей freads и fwrites, потому что если я беру имя входной_файла и Outfile с помощью зсапа, все работает отлично, и я не получить ошибку сегментации.
Я использую значение xflg
, чтобы решить, следует ли выполнять мою функцию или нет. val
- это значение, которое выполняет моя функция.
Вот моя функция:
void xFunc (input1, input2, val, xFlg) {
if (xFlg == 1) {
function code
.
.
.
} else {
return; //don't run the function if the user doesn't type -x
//into command line.
//I don't know if this is the proper way to do this.
}
}
Это то, что я хочу добиться:
./run -х 3,14 -o outputfilename.txt inputfilename.txt
Edit:
Если для получения имени входного файла я делаю следующее, ошибка сегментации не возникает:
char inFile[100];
printf("Name of input file: \n");
scanf("%99s",somestring);
Где именно это крах? –
Он компилируется без ошибок и сбой при открытии inFile. Я попытался использовать имя inFile, используя scanf, и он работает. – user6005857
Измените свой вопрос и добавьте код, в котором произошел сбой. –