我有以下代码,我想知道如何将文本文档的每一行存储到一个指针数组中。我想即时关闭,但出现了一些错误。
#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;
}
最佳答案
您的array
应该是一个指针数组。您有几行(因此是一个行数组),每行都是一个C字符串(一个指向NUL终止的char数组的指针)。
因此,您需要将变量声明为char **array = NULL
。
现在,每次读取一行时,必须在行数组中分配一个新条目,这样array=realloc(array,(size+1)*sizeof(char *))
然后读取一个缓冲区,分配内存以存储用array[size]=malloc(strlen(buffer)+1)
读取的字符串,然后复制strcpy(array[size],buffer)
然后递增size++
。
您必须相应地释放所有内容(释放所有指针,然后释放数组)。另外,请注意大小,缓冲区为50,但是您尝试读取150 ...保持一致。
关于c - 使用指针读取值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28592686/