0

次のコードは、入力ファイルの最後の行と同じ一連の行のみが含まれるように a を上書きしているようです。while ループを構成して、各バッファ行を配列の個別のインスタンスに格納するにはどうすればよいですか?

void readfile(const char *filename) {
FILE *f;
f = fopen(filename, "r");
char *a[500];
char *array[50];
char line_buffer[BUFSIZ];
char line=0;
//struct cal_event one[200];

while (fgets(line_buffer, sizeof(line_buffer), f)) {
    ++line;
    a[line] = (char*) &line_buffer;
    //printf("%s ", a[line]);
}
int l;
for(l=1; l<30; l++) {
    printf("%s ", a[l]);
}
}
4

2 に答える 2

0

あなたの最善の策は、おそらく各行に新しいバッファを割り当て、アドレスをに割り当てることa[line]です。

ポインターの割り当ては、おそらく次のようになります。

a[line++] = ...

したがって、最初の代入は、現在のようにオフセット 1 にある 2 番目の要素ではなく、オフセット 0 にある最初の要素になります。

于 2012-10-08T20:31:33.720 に答える
0

各行にスペースを割り当てる必要があります。エラーチェックなどを省くと、通常は次のようになります。

char buffer[max_line_len];
char *lines[max_lines];
size_t line=0;

while (fgets(buffer, sizeof(buffer), f)) {
    lines[line] = malloc(strlen(buffer)+1);
    strcpy(lines[line], buffer);
    ++line;
}
于 2012-10-08T20:31:34.050 に答える