3

次の C コードを使用して、渡した配列を出力しようとしています。テキストは各行に 1 つずつ 16 進形式で出力され、ファイルを開くのに問題はありません。私が最初にそれを書いたとき、私はそれが動作することに何の問題もありませんでした。私は出力ファイルを開いて、私の配列がそこにありました。パラメータを変更しましたが、fileOutName何も印刷できません。元に戻して他のいくつかのものに変更しようとしましたが、何も機能していないようです。また、デバッグするとpOutfile悪いポインタのように見えますが、私が言ったように、ファイルを作成しても何も書き込まれません。どんな助けでも大歓迎です。ありがとう

printoutput(int output[], char * fileOutName){
    int i = 0;
    FILE * pOutfile;
    pOutfile = fopen( fileOutName, "w" );
    while(output[i] != 0){
        fprintf( pOutfile, "0x%0.4X\n", output[i] );
        i++;
    }
}
4

3 に答える 3

10

後は必ず片付けてください。がありませんfclose(pOutfile)

于 2012-09-17T01:02:23.783 に答える
1

テキストを各行に 1 つずつ 16 進形式で出力する必要があります ...

この行

fprintf( pOutfile, "0x%0.4X\n", 5 );

常に同じ数値をフォーマットします - 5. それはおそらくそうあるべきです

fprintf( pOutfile, "0x%0.4X\n", output[i] );
于 2012-09-17T00:58:17.527 に答える
0

配列の境界を超える要素が 0 になることを期待していますが、明示的に設定しない限り、そうではない可能性があります。もしそうなら、それは大丈夫です。通常、配列はそのサイズとともに渡します。これはより安全で、読みやすく、より移植性があります。

printoutput(int output[], int size, char * fileOutName){
    int i=0;
    FILE * pOutfile;
    pOutfile = fopen( fileOutName, "w" );
    while(i!=size){
        fprintf( pOutfile, "0x%0.4X\n", output[i] );
        ++i;
        }
    fclose(pOutfile)
}

また、ポストインクリメントの代わりにプリインクリメント演算子の使用に慣れることを強くお勧めします。このような状況では、おそらく違いはありませんが、大きな入力や複雑な型の場合、実行時間を短縮できます。したがって、i++ ではなく ++i です。

于 2012-09-17T01:30:09.063 に答える