そこで以下のようなプログラムを組んだのですが、わけのわからないエラーに陥っています。
解決策はわかったのですが理由がわかりません。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 128
#define MAX_LINE 65536
int main(void){
// test.txtを読み込む
FILE *fp;
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("ファイルの読み込みに失敗しました。\n");
exit(1);
}
// ファイルを最後まで読み込む]
char buff[MAX_LINE][MAX_SIZE];
int len;
int i = 1;
while(1){
if(fgets(buff, MAX_SIZE, fp)==NULL)
break;
len = strlen(buff);
if(len == 0 || buff[len - 1] != '\n'){
if(feof(fp) == 0){
printf("データが不正です[%s]。\n", buff);
return 0;
}
}
buff[len-1] = '\0';
i++;
}
fclose(fp);
return 0;
}だとエラーが出て処理が強制終了するのに
// ファイルを最後まで読み込む]
char buff[MAX_LINE][MAX_SIZE];
を
// ファイルを最後まで読み込む]
static char buff[MAX_LINE][MAX_SIZE];
にするとエラーが出ません。
static変数は勉強中あまり使っておらず(理屈としてはわかったような気にはなっていますが)、苦手なのですが、この変化によって正常に動いたり異常が発生したりする理由は何なのでしょうか?
すみませんが、よろしくお願いします。