分配char指针数组
我有一些文件,我正在将内容读入char数组,我想将我从每个文件中读取的内容存储在一个字符数组中,以便我可以访问单独的字符数组(文件内容) index,我不确定如何执行此操作的语法。
我的理解是我需要将模式数组中的每个内存地址设置为每个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; }
这行不正确:
&patterns[i - 1] = &pData;
您正在尝试分配“取一个地址”运算符的结果,这是不可能的,因为它不是左值。
任务应如下:
patterns[i - 1] = pData;
但是在执行此操作之前需要分配patterns
。 您可以使用
patterns = malloc(sizeof(char*)*5);
或者简单地将patterns
声明为五个数组:
char *patterns[5];
这假设您的ReadFromFile
函数分配一个char*
,并将其分配给pData
指向的地址。 请注意,您需要free
通过malloc
/ calloc
/ realloc
获取的所有指针。
我没有特别仔细地阅读过,但令我感到奇怪的是,当它是**时,你正在参考模式。 这是在行:
&patterns[i-1] = &pData;