【发布时间】:2016-03-21 15:33:31
【问题描述】:
我试图将每一行分别存储在一个字符串数组中。显然,当我尝试打印 array[0] 时,我得到的只是文本文件的最后一行。但是当我在 while 循环中打印变量“line”时,我可以打印文本文件中的每一行,但我似乎只能存储 txt 文件的最后一行。
这可能吗?或者这是 getline 的限制..?
int main()
{
FILE * fp;
char *line;
ssize_t read;
size_t bufsize = 32;
int i=0;
char **array;
array = malloc(bufsize * sizeof(char));
line = malloc(bufsize * sizeof(char));
fp = fopen("testing.txt", "r");
while ((getline(&line, &bufsize, fp)) != -1) {
printf("%s", line);
array[i] = line;
i++;
}
fclose(fp);
printf("%s", array[0]);
return 0;
}
【问题讨论】:
-
“字符串数组中的每一行单独”。是什么让您认为 single 行的 single
malloc将使 each 行的 单独 存储? -
array是指向char的指针 数组。所以你想要array = malloc(bufsize * sizeof(char*));(不是sizeof(char))。您的malloc没有为bufsize指针分配足够的内存。 -
getline不是标准的。使用fgets。而EOF不一定是-1。不要在代码中使用幻数! -
getline()的一个方便之处在于它可以为您分配字符串... -
感谢您的回答,我是初学者,我的老师建议我们使用 getline,因为“它可以更好地处理大多数较大的行”。我会尝试两个!
标签: c arrays file-io getline line-by-line