gpt4 book ai didi

c++ - 添加到一个 int 会改变一个单独的 char 数组?

转载 作者:行者123 更新时间:2023-11-30 03:43:28 25 4
gpt4 key购买 nike

我正在尝试解析 .wav 文件头。如果我删除 chunk_size +=... 行,我会得到预期的结果:RIFF,但是一旦我添加该行,我就会得到 RIFFÄÿÿÿÿ。为什么添加到 chunk_size 的每个值显然都“附加”到 chunk_idchunk_id 怎么可能有四个以上的元素?是否有一些我不理解的关于数组或二进制数据的基本知识?在 char 数组上使用 cout 不合适吗?

struct Wave
{
Wave (FILE* file) {
char header[44];
uint size = fread(header, sizeof(char), 44, file);
chunk_size = 0;
for (uint i = 0; i < 4; i ++) {
chunk_id[i] = header[i];
chunk_size += header[i + 4] * pow(16, i);
}
cout << chunk_id;
}
char chunk_id[4];
uint chunk_size;
char format[4];
...
...
...
};

最佳答案

cout << chunk_id;

仅在 chunk_id 为 null 终止时有效。由于它不在您的程序中,因此该程序具有未定义的行为。

chunk_id 设为包含 5 个元素的数组,并确保在构造函数中以 null 终止它。

Wave (FILE* file) {
char header[44];
uint size = fread(header, sizeof(char), 44, file);
chunk_size = 0;
for (uint i = 0; i < 4; i ++) {
chunk_id[i] = header[i];
chunk_size += header[i + 4] * pow(16, i);
}
chunk_id[4] = '\0';
cout << chunk_id;
}
char chunk_id[5];

关于c++ - 添加到一个 int 会改变一个单独的 char 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36071383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com