0

ねえ、この質問に続いて

また行き詰まってしまったので、ウェブや教科書を調べてみました。すぐに別の質問を投稿するのはおそらく悪いことだと思いますが、この問題には本当に困惑しています。だからとにかく...

割り当ての次の部分では、人の年齢を見つけるように求められます。この年齢は、名前の次のバイトにあります。基本的に名前が「ボブ」だったら

[L][u][k][e][\0][\0][1][5]

ここで、文字数が偶数のすべての名前は 2 つのヌル文字を取得して偶数にし、次の 2 バイトにshort整数を格納します。現時点では、文字列の長さを確認してから、オフセットに配置する前に長さにさらに追加しようとしましたが、うまくいかないようです

    if (name.length() % 2 != 0) {
        offset += (name.length());
        age = *((short*)foo+offset);
        cout << age << "\n";
    } else {
        offset += (name.length());
        age = *((short*)foo+offset);
        cout << age << "\n";
    }
4

1 に答える 1

4

C および C++ では、ポインタのインクリメントが指しているオブジェクトのサイズで乗算されることを見逃しています。したがって、*((short*)foo+offset)実際にはオフセット時間の sizeof(short) バイトを foo に追加します。

または、これは理解できても、キャストが加算よりも優先順位が高いことに気付いていないかもしれません。(short*)foo+offset は ((short*)foo)+offset ではなく、(short*)(foo+offset) です。

とにかくあなたが欲しいのはです*(short*)((char*)foo + offset)。foo がすでに char* または類似の型である場合は、char* へのキャストを省略できます。

于 2011-08-06T15:07:33.190 に答える