Ошибка сегментации (ядро сброшено) при попытке прочитать текстовый файл в C - PullRequest
0 голосов
/ 04 октября 2018

Я хочу прочитать файл pgm на языке C, используя fgets, но я получаю сообщение об ошибке и не знаю, какая инструкция вызывает его.
Вот мой код:

FILE* file = NULL;
char chaine[TAILLE_MAX] = "";    
int elts[TAILLE_MAX];        

image = fopen("test.txt", "r+");

if(image != NULL)
{
    int i=0;

    while (fgets(chaine, TAILLE_MAX, file) != NULL)
    {                                                     
        elts[i] = atoi(chaine);
        printf("%d\n", i);
        i++; 
    }
}

Он читаетдо последней строки файла.Вот вывод:

...
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364

RUN FINISHED; Segmentation fault; core dumped; real time: 140ms; user: 0ms; system: 0ms

Проблема не в файле, но я думаю, что это функция fgets

1 Ответ

0 голосов
/ 04 октября 2018

Текстовые PGM файлы будут содержать много значений в каждой строке для пикселей.С pixels[i] = atoi(chaine) вы конвертируете только первые этих чисел.

Вам нужно проанализировать или маркировать строки, чтобы получить все пиксели.

И, конечно же, вам нужно убедиться, что прочитанные значения могут поместиться в целочисленный массив назначения, размер которого должен составлять W * H элементов (где W - ширина изображения и H - высота изображения)..

И, как и во всех графических форматах, даже в текстовом, я настоятельно рекомендую вам найти библиотеку, которая справится с вами.

...