0

複数のファイルを読み込もうとしています。ファイルの形式は、YYYY-mm-dd-HH-MM.txtたとえば次のようなものになります。2012-11-26-18-50.txt

私は次のコードを持っています

char text_buffer[1000];
char file_buffer[256];
int year, month, day, hour, minute;
year = 2012; month = 11; day = 26; hour = 18; minute = 0;

sprintf(file_buffer, "%d-%d-%d-%d-%d.txt", year, month,day,hour,minute);
FILE *ptr_file;
ptr_file=fopen(file_buffer, "r");
if(ptr_file != NULL)
    printf("File opened %s for reading.\n", file_buffer);
else
    printf("Couldn't open %s.\n", file_buffer);

line_number = 0;
while(fgets(buffer,sizeof(buffer), ptr_file) != NULL){
    if(strcmp(buffer, "")==0)
       return 0;
    char *views = strok(buffer, ",");
...
}

必要な情報はこれですべてだと思います。問題がどこにあるのかまだ不明な場合は、すべて投稿します。プログラムを実行するとき。との両方を取得 Filed opened...Couldn't open...ます。次に、セグメンテーション違反。

誰かが私がこれを理解するのを手伝ってもらえますか?

ありがとう。

4

4 に答える 4

3

最初に、ファイルを開くことができない場合に何かを行う (おそらくエラー コードを返す) ことを確認する必要があります。NULL FILE* から読み取ろうとすると、セグメンテーション違反が発生します。

また、file_buffer はバッファーではなくポインターであるため、メモリが破損しています。何かに初期化する必要があります。最後に、開いているファイルを確実に閉じる必要があります。

また、バッファをどこかに定義すると仮定しています。あなたのコード例では、定義がわかりません。たぶん、代わりに text_buffer を使用するつもりでしたか?

このような種類のメモリ破損に LINUX を使用している場合は、2 つのツールをお勧めします。

  1. GDB を使用して、プログラムを 1 行ずつ実行し、変数を調べていきます。
  2. Valgrind は、このような単純なメモリ破損について知らせてくれます。

これら 2 つのツールに習熟すれば、ほとんどの単純なプログラミング エラーを排除するのに役立ちます。

于 2012-11-27T00:23:12.110 に答える
1

file_buffer初期化されることはなく、どこかを指す可能性があります。おそらく次のようなものが必要です。

char file_buffer[PATH_MAX+1];

それ以外の

char *file_buffer;
于 2012-11-27T00:15:35.163 に答える
0

日付と時刻をフォーマット印刷します。たとえば%02d、それぞれ1〜2桁の数字が含まれる場合があります。

于 2012-11-27T01:14:50.233 に答える
0

file_buffer変数をどこにも初期化しませんでした。

次のように初期化する必要があります

char file_buffer[256];
于 2012-11-27T00:15:50.827 に答える