ifstream读取:来自哪里的额外字节?

时间:2017-10-23 20:22:42

标签: c++ file-io

我正在阅读WHOIS记录文件。示例文件的第一行在编辑器中读取:“id:0--0.ga”

在代码中,我检查以确认第一行以“id:”开头,如下所示:

// given ifstream * fs, 
char id[3];
streampos pos = fs-> tellg();
fs -> read(&id[0],3);
fs -> seekg(pos);

if (// id[3] is "id:" ...

但是,当我这样做时(我正在运行调试器;进一步使用clang而不是gcc编译),我在id得到以下结果:

Strange stuff in id char array.

除了'i','d'和':'之外,它所读取的字符是:

\xb87#_? 

问号周围有停车标志。我不知道我怎么能读到任何“额外的”,因为我只读了三个字节到一个适当长度的数组......

此外,if语句的计算结果为true。

这可能只是编码错误,调试器中的错误,还是其他的事情?

1 个答案:

答案 0 :(得分:0)

调试器假设id包含一个字符串,但它没有。在查看未以您期望调试器理解的格式存储的内容时,您可能应该忽略调试器。

另一种方法是将调试器的显示精神转换为原始内存内容,然后以正确的格式精心解析原始内存内容。我们有一些内存区域,如果被理解为包含一个字符串就意味着“id:\ xb87#_?...”所以相同的内存区域,如果被理解为只有三个字符的数组,将是“id :”