我是c的新手,并且很难进行内存管理。
我有一个程序,它接受一个文件数组,遍历每个文件,并将数组复制到结构中的值。
给出文件列表file1.txt, file2.txt, file3.txt
通过我的for循环的第一次迭代按预期工作。所采用的值与预期值file1.txt
相同。在第二个循环中,我的GetFileContent()
方法中的值为ile1.txt
(它仅截断了数组中第一个项的第一位)。如果我将i值更改为2,则会将前2个字母切换为le1.txt
。
char *GetFileContent(char *filePath)
{
char *buffer = NULL;
size_t size = 0;
FILE *file = fopen(filePath, "r");
fseek(file, 0, SEEK_END);
size = ftell(file);
rewind(file);
buffer = malloc((size + 1) * sizeof(*buffer));
fread(buffer, size, 1, file);
fclose(file);
buffer[size] = '\0';
return buffer;
}
int main (void)
{
char *file = {"file1.txt", "file2.txt", "file3.txt"};
int numberOfFiles = sizeof(file);
struct ArrayStoredInHeap myStruct[numberOfFiles];
for(int i = 0; i < numberOfFiles; i++)
{
struct ArrayStoredInHeap tmpStruct;
tmpStruct.entireFile = GetFileContent(&file[i]);
myStruct[i] = tmpStruct;
}
for(int i = 0; i < numberOfFiles; i++)
{
printf("%s \n", myStruct[i].entireFile);
getchar();
}
}
我期望循环中第二次的值为file2.txt
,即数组中的第二个值,而不是从数组中删除1个字符。我假设我所引用的内存正在移动一个字节,但我不确定这将如何发生。