添加到 int 会更改单独的 char 数组

Adding to an int alters a separate char array?

本文关键字:单独 char 数组 int 添加      更新时间:2023-10-16

我正在尝试解析.wav文件头。如果我删除chunk_size +=...行,我会得到预期的结果:RIFF,但是一旦我添加该行,我就会得到RIFFÄÿÿÿ。为什么添加到chunk_size的每个值显然都"附加"到chunk_idchunk_id怎么会有四个以上的元素?数组或二进制数据有什么我不明白的基本内容吗?在字符数组上使用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] = '';
    cout << chunk_id;
}
char chunk_id[5];