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++] = ...

这样第一个赋值是偏移量 0 处的第一个元素,而不是您现在拥有的偏移量 1 处的第二个元素。

于 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 回答