分配一个字符指针数组

Allocating a char pointer array

我有很多文件,我正在将它们的内容读取到一个字符数组中,我想将从每个文件中读取的内容存储在一个字符数组中,以便我可以访问单独的字符数组(文件内容)按索引,我不确定如何执行此操作的语法。

我的理解是我需要将模式数组中的每个内存地址设置为每个字符数组一个内存地址;到存储在 patternData 中的 char 数组,但我不知道如何设置它。我缺少什么语法来实现它?

我试过的

我会想,如果我存储的是 char* 类型,那么我需要一个 char** 类型来存储单独的 char 数组。

我将通过使用以下符号将模式索引的内存地址设置为

来访问char*
&patterns[INDEX] = &pData;

但是这不起作用。有很多 "char pointer array" 问题,但我不确定将 pData 简单分配给模式索引的正确方法。

char *tData;
int tLength;
char *pData;
int pLength;

char **patterns;

void ReadFromFile(FILE *f, char **data, int *length) //This is what is passed into function


    int main(int argc, char **argv)
    {
        for (int i = 1; i <= 5; i++)
        {
            FILE *f;
            char fileName[1000];
            sprintf(fileName, "file%d.txt", i);
            f = fopen(fileName, "r");
            if (f == NULL)
                return 0;

            ReadFromFile(f, &pData, &pLength); //works to here, contents of file assigned to pData
            fclose(f);

            &patterns[i - 1] = &pData;

        }

        return 0;

    }

我没有特别仔细地阅读,但令我感到奇怪的是,当它是 ** 时,您正在参考模式。这是在行中:

&patterns[i-1] = &pData;

此行不正确:

&patterns[i - 1] = &pData;

您正试图对 "take an address" 运算符的结果进行赋值,这是不可能的,因为它不是左值。

分配应该如下:

patterns[i - 1] = pData;

但在执行此操作之前需要分配 patterns。您可以使用

patterns = malloc(sizeof(char*)*5);

或简单地声明 patterns 为五个数组:

char *patterns[5];

这假定您的ReadFromFile 函数分配了一个char*,并将其分配给pData 指向的地址。请注意,您需要 free 通过 malloc/calloc/realloc.

获得的所有指针