添加到int会改变单独的char数组吗?

时间:2016-03-17 20:48:05

标签: 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];
    ...
    ...
    ...
};

1 个答案:

答案 0 :(得分:2)

cout << chunk_id;

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

使chunk_id包含5个元素的数组,并确保在构造函数中将其终止。

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];