尝试在C中读取txt文件时出现Erreur de segmentation(核心转储)

时间:2018-10-04 12:07:24

标签: c fgets

我想使用fgets用C语言读取pgm文件,但出现错误,我不知道是哪条指令引起的。
这是我的代码:

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 :(得分:2)

基于文本的PGM files将在每行像素中包含许多值。使用pixels[i] = atoi(chaine),您只能转换这些数字的第一个

您需要分析或tokenize行以获取所有像素。

当然,您需要确保读取的值适合目标整数数组,该整数数组必须大W * H个元素(其中W是图像宽度,{{ 1}}是图像高度)。

与所有图像格式一样,甚至是基于文本的图像格式,我真的建议您找到一个库来为您处理。