我在互联网上的教程之后编写了这个二进制阅读器。(我正在寻找链接...)
代码逐字节读取文件,前 4 个字节一起是魔术字。(比方说 MAGI!)我的代码如下所示:
std::ifstream in(fileName, std::ios::in | std::ios::binary);
char *magic = new char[4];
while( !in.eof() ){
// read the first 4 bytes
for (int i=0; i<4; i++){
in.get(magic[i]);
}
// compare it with the magic word "MAGI"
if (strcmp(magic, "MAGI") != 0){
std::cerr << "Something is wrong with the magic word: "
<< magic << ", couldn't read the file further! "
<< std::endl;
exit(1);
}
// read the rest ...
}
现在问题来了,当我打开我的文件时,我得到这个错误输出:
Something is wrong with the magic word: MAGI?, couldn't read the file further!
所以在 MAGI 之后总是有一个(大部分是随机的)字符,就像在这个例子中的字符?
!我确实认为这与 C++ 中的字符串如何存储和相互比较有关。我是对的,我该如何避免这种情况?
PS:这个实现包含在另一个程序中并且工作得很好......很奇怪。