【问题标题】:How to get consistent responses from fstream?如何从 fstream 获得一致的响应?
【发布时间】:2014-10-28 16:57:31
【问题描述】:

当我通过 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 更加一致的方法?

【问题讨论】:

  • 你必须把 \0 放在缓冲区的末尾
  • 上面的代码适合放在哪里?
  • buffer!="RIFF" 将指向 buffer 的指针与指向字符串文字的指针进行比较。也许strncmp().

标签: c++ binary fstream


【解决方案1】:

您正在阅读 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;
}

【讨论】:

    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多