1

重複の可能性:
初期化されていない値が初期化されていますか?

void Encrypt( FileContent *pFile )
{
    /* Get the key total ascii value */
    DWORD asciiKeyValue;

    for (DWORD i=0; i < pFile->keyLength; i++)
    {
        asciiKeyValue += pFile->encKey[i];
    }

    _tprintf(_T("[*]DEBUG The encKey ascii value is: %ld\n"), asciiKeyValue);
}

私は430whenの出力を取得していますDWORD asciiKeyValueが、一度DWORD asciiKeyValue = 0230あるべき姿です。

誰かがそれについて説明していますか?明示的な値が割り当てられていない場合、asciiKeyValue変数はランダムな値を取得しますか?

4

4 に答える 4

5

ランダムに「なりません」。あなたがあなたを宣言すると、DWORDそれは以前のアドレスでメモリにあったものをすべて持っています。何か(0など)に初期化しない限りメモリは消去されません。

于 2012-09-21T08:41:15.600 に答える
4

初期化はしませんasciiKeyValue。他の言語のように、値が暗黙的に 0 に初期化されることはありません。開始値を明示的に設定する必要があります。あなたのコードは次のようになると思います:

DWORD asciiKeyValue = 0;

これにより、予測可能な結果が得られます。

お店で新しい額縁を買って、絵の具を足しているようなものです。最後に、「幸せなカップルの傷ついた絵があるのはなぜ?? 私が描いたのではありません!」と尋ねるかもしれません。解決策は、デフォルトのランダムな写真を空白のキャンバスに置き換えることです。

于 2012-09-21T08:44:53.303 に答える
4

値を初期化するだけでインクリメントすることはありません。したがって、最初は、最後に書き込まれた値が含まれます。

あなたが持っていた場合:

DWORD asciiKeyValue = 0; // Or any other value

そうすれば、一貫した結果が得られます。

于 2012-09-21T08:41:18.337 に答える
1

変数の初期化について聞いたことがあります。さて、あなたは今持っています:-)

DWORD asciiKeyValue = 0 ;

あなたの問題を解決します。

于 2012-09-21T08:45:24.170 に答える