-1

あるモデル ファイル タイプを Wavefront obj ファイル タイプに変換するプログラムを作成してきましたが、そのファイルに自分の顔を書き込むときに問題が発生しました。

    if(!strcmp(line , "TEX:TOP"))
    {
        i++;
            TEX_TOP << "f " << i << "/" << i << "/" << i << " ";
        i++;
            TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << " ";
        i++;
            TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << " ";
        i++;
            TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << "\n";
    }

コードのこの部分は出力されるはずです..

f 1/1/1 2/2/2 3/3/3 4/4/4

しかし、..

f 1971327331/1971327331/1971327331 0x28f5a81971327332/1971327332/1971327332 0x28f5a81971327333/1971327333/1971327333 0x28f5a81971327334/1971327334/1971327334

何時間も検索しましたが、まだ修正が見つかりません。

編集: LihO のおかげで、私の問題は、TEX_TOP fstream オブジェクトを各行の先頭に配置していて、それを再宣言していると仮定して、カウントアップするために int を 0 から開始する必要があったことでした。

    i = 0;

    if(!strcmp(line , "TEX:TOP"))
    {
        i++;
            TEX_TOP << i << "/" << i << "/" << i << " ";
        i++;
            TEX_TOP << i << "/" << i << "/" << i << " ";
        i++;
            TEX_TOP << i << "/" << i << "/" << i << " ";
        i++;
            TEX_TOP << i << "/" << i << "/" << i << "\n";
    }
4

1 に答える 1

2

初期化されていない変数を使用しているため、未定義の動作が発生すると想定しています。

int i;

値を増やし始める前に、明示的にゼロ初期化してみてください。

int i = 0;

fstreamまた、オブジェクト自体をそのに渡していることに注意してくださいoperator<<

TEX_TOP << TEX_TOP << i << "/" << i << "/" << i << " ";

これにより、不要なものがファイルに表示されます。次のように変更するだけです。

TEX_TOP << i << "/" << i << "/" << i << " ";
于 2013-10-11T01:16:08.057 に答える