c - 为什么迭代这个 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 个字符。我假设我引用的内存移动了一个字节,但我不确定这将如何发生。
解决方案
推荐阅读
- python - 我想从 csv 文件中提取字符串的某些部分
- javascript - 将输入绑定到按钮单击函数的值
- android - Android:如何在 Html.fromHtml() 中显示“大于号”,它被理解为开始标记而不是大于号
- django - DRF 中没有使用 ModelViewset 的 PUT 方法
- three.js - ThreeJS 编辑器透明背景
- python-3.x - 你如何使用 Selenium Python 并让它遍历网页中需要的每个选择标签,然后总是选择 [1] 或第一个选项?
- .net - 如何通过 API 获取 nuget 包元数据?
- c# - xamarin 表单条目的千位分隔符格式化程序
- c# - 如何让二维数组在 C# 中对齐?
- python - 如何用盐检查密码()?