2012-04-10 11 views
0

私は、symbol_and_headerにencoding_symbols_tab [0]に保持されているすべてのデータを保存します。 'encoding_symbols_tab'は、例えば、 500 * 1024文字。void式の使用が無効です。 voidポインタを指す配列から情報をコピーします。 charポインタで指し示された配列へ

この例では、次のコードを変更しました。私は私が手にこのコードを実行すると

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; 
    } 

が「エラー:無効表現の使用は無効です」 がどのように私は(「無効** encoding_symbols_tab」の種類を変更せずに)これを解決するために、コードを変更する必要がありますか。? これはCプログラムです。

+0

どのように 'encoding_symbols_tab'がいっぱいですか?それには何が含まれていますか? – crazyjul

+0

試しに '((char **)encoding_symbols_tab)[0] [k]' – keety

+0

あなたは 'malloc()'(または 'calloc()')の戻り値をキャストする必要はありません。 – RastaJedi

答えて

1

使用

((char**)encoding_symbols_tab) [0][k]; 
+0

ありがとう!今それは働いている! –

1

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

void **encoding_symbols_tabの代わりにchar **encoding_symbols_tabを宣言することもできますが、まずそれが本当に指していることを確認してください。あなたはその後、500 * 1024文字(つまり、512000文字)のフラット配列に

  • encoding_symbols_tabもしポイントする必要があります:あなたの質問ではあなたはそれがあるかもしれないことを何かを示唆
    • char *
    • としてencoding_symbols_tabを宣言します自身各点500のchar *ポインタの配列にencoding_symbols_tab[x*1024+k]
  • 場合encoding_symbols_tab点として、その要素を参照1024文字の配列、そしてあなたがしなければならない:encoding_symbols_tab[x][k]

として

  • 宣言encoding_symbols_tabリファレンス
  • char **としての要素が xを想定したが(500のうち)最初の次元であり、 kは秒です次元(1024のうち)。

関連する問題