2

プレーンテキストリストにリストされているファイルからデータを読み取る簡単なプログラムを作成しようとしていますが、processFile関数でfgets()を呼び出そうとすると、セグメンテーション違反が発生し続けます。

processFile( "file.txt")のようなものを単に呼び出す場合は発生しませんが、processList関数を介してprocessFileを呼び出そうとすると発生します。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void processFile (char *file)
{
    char line[256];
    FILE* pgmFile;
    pgmFile = fopen(file, "r");
    fgets(line, 200, pgmFile); // Seg fault here
    fclose(pgmFile);
}    

// Runs processFile on every file listed in list
void processList (char *list)
{
    FILE *pgmList;
    pgmList = fopen(list, "r");

    char line[256];

    while (fgets(line, 255, pgmList) != NULL) {
        processFile(line);
    }
    fclose(pgmList);
}      

int main ()
{
    processList("downgesture_test1.list");
}  
4

2 に答える 2

3

の戻り値を確認してみてくださいfopen。もしそうならNULL?「ファイル名」の末尾にが付いている可能性が高いためです\n

于 2012-09-26T20:21:17.007 に答える
1

ファイルが存在しない場合、fopenはNULLを返します。fopenの呼び出し後にエラー処理を追加します。リストに不正なエントリがある可能性があります。

何が起こっているのかというと、pgmFileがNULLであり、fgetsがそれにアクセスしようとして、セグメンテーション違反が発生している可能性があります。

于 2012-09-26T20:22:07.003 に答える