0

encoding_symbols_tab[0]に保持されているすべてのデータをsymbol_and_headerに保存したいと思います。'encoding_symbols_tab'は、たとえば500*1024文字の配列を指します。

この例では、次のコードを変更しました。

void** encoding_symbols_tab;

(..)

char* return_symbol_and_header_array ()
    { //abcd
    char* symbol_and_header =  (char*)calloc(1, 1024 + 14 );
    (..)   
    int k=0;
    for (k=0; k < 1024; k++)
    {
    symbol_and_header [k+14] = (char) encoding_symbols_tab [0][k];
    }

    return symbol_and_header;
    }

このコードを実行すると、「エラー:void式の無効な使用」が発生します。これを解決するには、コードをどのように変更すればよいですか(「void ** encoding_symbols_tab」のタイプを変更せずに)?Cプログラムです。

4

2 に答える 2

1

文字を指している場合encoding_symbols_tab、なぜそれをvoid *sを指していると宣言するのですか?void *ポインタはどのタイプのデータも指していないため、間接参照することはできません。

char **encoding_symbols_tabの代わりに宣言することもできますvoid **encoding_symbols_tabが、最初に、それが実際に指していることを確認してください。あなたの質問では、それは他の何かかもしれないと提案します:

  • encoding_symbols_tab500 * 1024文字(つまり512000文字)のフラット配列を指す 場合は、次のことを行う必要があります。
    • encoding_symbols_tabとして宣言するchar *
    • その要素を次のように参照しますencoding_symbols_tab[x*1024+k]
  • encoding_symbols_tabそれぞれが1024文字の配列を指す500個のポインターの配列を指す場合char *は、次のことを行う必要があります。
    • encoding_symbols_tabとして宣言するchar **
    • その要素を次のように参照しますencoding_symbols_tab[x][k]

xが最初の次元(500から)でkあり、2番目の次元(1024から)であると仮定します。

于 2012-04-10T21:08:36.200 に答える
1

使用する

((char**)encoding_symbols_tab) [0][k];
于 2012-04-10T21:06:11.227 に答える