2017-10-23 16 views
0

私はWHOISレコードファイルを読んでいます。サンプルファイルの最初の行は、エディタでは、読み取ります。「ID:0--0.gaは」ifstream read:余分なバイトはどこから来ますか?

コードでは、私は最初の行で始まることを確認するためにチェックし、「ID:」を次のように

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

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

、私はこれを行う(と私は、デバッガを実行しています。さらには、それを打ち鳴らすのではなくgccでコンパイルされている)、私はidで、次の結果が得られます。

Strange stuff in id char array.

それは読ん文字「i」、「d」、「:」に加えて、

\xb87#_? 

疑問符には停止記号が付いています。私は適切な長さの配列に3バイトしか読み込んでいないので、 "余分なもの"をどのように読み取ることができたかわかりません。

また、ifステートメントはtrueと評価されます。

これはコードミス、デバッガのエラー、または何か他のことが起こりますか?

+5

nope - デバッガが最初のヌルまでの文字列を表示するだけです。 id 4バイトを作成し、id [3]を\ 0 – pm100

+0

@ pm100に設定する必要があります。 – bordeo

+0

@ pm100私はあなたがカップルupvotesを持って参照してください。なぜ誰かが理由を説明し、答えを受け入れることを望むなら、数分間は病気を残してください。それ以外の場合は削除します。 – bordeo

答えて

0

デバッガでは、idには文字列が含まれていると想定されています。おそらく、デバッガが理解していると予想されるフォーマットに格納されていないものを見るときは、デバッガを無視するだけです。

代わりに、デバッガのディスプレイを生のメモリの内容に精神的に変換してから、生のメモリの内容を正しい形式で精神的に解析することもできます。文字列を含むと理解されていると、 "id:\ xb87#_?..."という意味のメモリ領域があります。同じ領域のメモリが3文字の配列であると理解されていれば、 "id : "

関連する問題