首页 > 解决方案 > 为什么迭代这个 char 数组会增加数组中的字节而不是数组值?

问题描述

我是 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 个字符。我假设我引用的内存移动了一个字节,但我不确定这将如何发生。

标签: carrayscharacter

解决方案


推荐阅读