我有以下代码,我想知道如何将文本文档的每一行存储到一个指针数组中。我想即时关闭,但出现了一些错误。

#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/

10-11 23:14
查看更多