我有以下代码,我想知道如何将文本文档的每一行存储到指针数组中。我想我很接近,但我得到了一些错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE * fp;
char buffer[50];
int totalSize;
totalSize = 6;
int size = 0;
char * array;
fp = fopen(location,"r");
while (fgets(buffer,150,fp) != NULL)
{
array = malloc(sizeof(strlen(buffer))+1);
strcpy(array[size],buffer);
size++;
}
for (int x = 0; x < size ; x++)
{
printf("%s",array[x]);
}
free(array);
return 0;
}
答案 0 :(得分:1)
你的array
应该是一个指针数组。你有行(所以是一个行数组),每行是一个C字符串(一个指向NUL终止字符数组的指针)。
因此,您需要将变量声明为char **array = NULL
。
现在,每次读取一行时,必须在行数组中分配一个新条目,这样array=realloc(array,(size+1)*sizeof(char *))
然后读取缓冲区,分配内存以存储用array[size]=malloc(strlen(buffer)+1)
读取的字符串然后复制strcpy(array[size],buffer)
然后增加size++
。
你必须相应地释放一切(释放所有指针然后释放数组)。另外,请注意尺寸,缓冲区为50,但您尝试阅读150 ...保持一致。