如何从fstream获得一致的回复?

时间:2014-10-28 16:57:32

标签: c++ binary fstream

当我通过fstream读取信息时,它在两个不同的程序中发生了两次,即使给定的文件没有改变,给我程序的输入也不稳定。

在我最近的一个关注音频阅读的节目中。我正在对文件中的前四个字母进行简单的检查。这些字母应该是RIFF,它们也是 - 我检查过。

因此,为了检查给定二进制文件的格式,我缓冲前四个字母,看看它们是否等于'RIFF'。

char buffer[4];
std::ifstream in(fn,std::ios::binary);
in.read(buffer,4);
if(buffer!="RIFF"){//Always wrong atm
    std::cout << "INVALID WAV FILE: " << buffer << std::endl;
}   

当我第一次制作节目时,我记得这个工作正常。现在,我通过自己的cout得到了一个错误:

INVALID WAV FILE: RIFFýfK    

有没有人知道出了什么问题?也许是一种让fstream更加一致的方法?

1 个答案:

答案 0 :(得分:6)

你正在阅读4个字符,但是没有添加零终结符,而且你的比较是错误的,因为你没有比较字符串相等性,你应该这样做:

char buffer[5];
std::ifstream in(fn, std::ios::binary);
in.read(buffer, 4);
buffer[4] = '\0'; // Add a zero-terminator at the end
if (strcmp(buffer,"RIFF")) { // If buffer isn't {'R','I','F','F','\0'}..
    std::cout << "INVALID WAV FILE: " << buffer << std::endl;
}