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

标签 c++ arrays char wav binary-data

我正在尝试解析 .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/

相关文章:

javascript - 计算字符串中的所有字符

c++ - 使用 C++ 将 char 数组转换为 int

c++ - cin word 到 char 数组,每个输入的单词显示所有单词。

c++ - 整数到模板 : cannot appear in a constant-expression

c++ - 为什么不允许将 this 的指针用作函数的默认参数?

c++ - 当从函数传递时如何在 gdb 中查看数组内容

c - C中的函数打印字符内容

c++ - clang-format:中断函数参数而不是函数限定符(noexcept)

c++ - 为什么在通过添加字符串文字和 char 进行初始化时不打印字符串

c - 在 C 中向数组写入/读取值