2

私はこの配列を持っています

char ***three_dim=0;

three_dimが割り当てられ、データが入力されます。この後、その内容をファイルに書き込んで読み返す必要があります。私はそれを書くために以下を試みましたが、失敗します。

FILE *temp;
temp=fopen("temp","w");
fwrite(three_dim,outer_dim*ROWS*COLUMNS,1,temp);
fclose(temp);

編集:

割り当て方法は次のとおりです。

three_dim=new char**[outer_dim];
         for(int i=0;i<outer_dim;++i)
            {
                three_dim[i]=new char*[ROWS];
                for(int k=0;k<ROWS;++k)
                    three_dim[i][k]=new char[COLUMNS];
            }
4

2 に答える 2

3

fwrite()配列はouter_dim * ROWS * COLUMNSバイトのコンパクトな領域として割り当てられていないため、単一のファイルに書き込むことはできません。

for-cycleで割り当てたので、for-cycleでも出力する必要があります。

for (i = 0; i < outer_dim; i++)
    for (j = 0; j < ROWS; j++)
        fwrite(three_dim[i][j], COLUMNS, 1, temp);
于 2012-04-04T15:37:02.947 に答える
2

他の人が言っているように、最も可能性の高い問題は、メモリが連続して割り当てられていないことです。

ROWSとCOLUMNSがコンパイル時定数である場合、次のようなことを行うことができます。

char (*three_dim)[ROWS][COLUMNS]; // declare three_dim as a pointer to a 
                                  // ROWSxCOLUMNS array of char
...
three_dim = malloc(sizeof *three_dim * outer_dim);

three_dimその後、3D配列としてアクセスできます。

three_dim[i][j][k] = something();

fwriteこれにより、データが連続して割り当てられ、1回の呼び出しで次のように書き込むことができるはずです。

fwrite(three_dim, sizeof *three_dim * outer_dim, 1, temp);

そうでなければ、impの解決策が進むべき道です。

于 2012-04-04T15:46:15.850 に答える