分配一个char指针数组

时间:2015-03-18 15:34:51

标签: c pointers multidimensional-array char

我有一些文件,我正在将内容读入char数组,我想将每个文件中读取的内容存储在一个字符数组中,以便我可以访问单独的字符数组(文件内容)通过索引,我不知道如何做到这一点的语法。

我的理解是我需要将模式数组中的每个内存地址设置为每个char数组一个内存地址;到存储在patternData中的char数组,但我不知道如何设置它。我错过的语法是什么,我需要让它发生?

我尝试了什么

我原以为如果我存储了char*的类型,那么我需要一个类型char**来存储单独的char数组数组。

我将使用以下表示法访问char*以将模式索引的内存地址设置为

&patterns[INDEX] = &pData;

然而,这不起作用。有很多“char指针数组”问题,但我不确定将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;

    }

2 个答案:

答案 0 :(得分:2)

此行不正确:

&patterns[i - 1] = &pData;

您正在尝试分配&#34;取一个地址&#34;运算符,这是不可能的,因为它不是左值。

作业应如下:

patterns[i - 1] = pData;

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

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

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

char *patterns[5];

这假定您的ReadFromFile函数分配char*,并将其分配给pData指向的地址。请注意,您需要free通过malloc / calloc / realloc获得的所有指针。

答案 1 :(得分:0)

我没有特别仔细地阅读过,但是当我感到非常奇怪的是,当它是**时,它会引用模式。这是在行:

&patterns[i-1] = &pData;