Я пытаюсь прочитать 3 двойных значения из входного файла с помощью fscanf, но при попытке сделать это я получаю segfault. Мой код выглядит следующим образом:
FILE * infile = fopen(argv[1], "r");
double r_d, r, c;
fscanf(infile, "%le %le %le", r_d, r, c);
fclose(infile);
Входной файл выглядит так:
1.000000e+00 1.000000e+00 1.000000e+00
Есть идеи, где я ошибаюсь? Я точно знаю, что тип данных предназначен для чтения как% le.





Для функций scanf требуется указатель для объектов, которые вы хотите заполнить значениями, поэтому:
fscanf(infile, "%le %le %le", &r_d, &r, &c);
// ^ ^ ^
было бы намного лучше начать. Без операторов адреса он, скорее всего, будет использовать текущее значение переменных (которые, если они имеют статическую продолжительность хранения, как они кажутся, будут произвольными) в качестве указателя для записи значений. Вряд ли это закончится хорошо :-)
Я бы предположил, что приличный компилятор должен иметь как минимум предупрежден, чтобы типы аргументов были не такими, как ожидалось. Если это так, вы должны взять за привычку не игнорировать такие предупреждения.
Большое спасибо, такая простая ошибка. Это было правильно.
Включите все предупреждения компилятора, чтобы увидеть, что
r_dвfscanf(infile, "%le %le %le", r_d, r, c);не являетсяdouble *.