无效表达的无效使用;从空指针指向的数组复制信息;进入由char指针指向的数组

无效表达的无效使用;从空指针指向的数组复制信息;进入由char指针指向的数组,c,compiler-errors,C,Compiler Errors,我想将保存在symbol_和_头中的编码_symbol_选项卡[0]中的所有数据存储起来。 “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

我想将保存在symbol_和_头中的编码_symbol_选项卡[0]中的所有数据存储起来。 “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**encoding\u symbols\u选项卡;
(..)
char*返回\u符号\u和\u头\u数组()
{//abcd
char*symbol_和_头=(char*)calloc(1,1024+14);
(..)   
int k=0;
对于(k=0;k<1024;k++)
{
符号_和_头[k+14]=(字符)编码_符号_选项卡[0][k];
}
返回符号_和_头;
}
当我运行此代码时,我得到“错误:无效使用void表达式” 如何更改代码以解决此问题(不更改“void**encoding\u symbols\u tab”的类型)。? 这是一个C程序。

使用

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

如果
encoding\u symbols\u tab
指向字符,为什么要声明它指向
void*
s?不能取消引用
void*
指针,因为它不指向任何类型的数据

您可以声明
char**encoding\u symbols\u tab
而不是
void**encoding\u symbols\u tab
,但是,首先,确保它真正指向的是它。在你的问题中,你认为可能是其他原因:

  • 如果
    encoding\u symbols\u tab
    指向500*1024个字符(即512000个字符)的平面数组,则必须:
    • 编码\u符号\u选项卡
      声明为
      char*
    • 将其元素引用为
      编码\u符号\u选项卡[x*1024+k]
  • 如果
    encoding\u symbols\u tab
    指向一个包含500个
    char*
    指针的数组,并且每个指针指向一个包含1024个字符的数组,则必须:
    • encoding\u symbols\u选项卡声明为
      char**
    • 将其元素引用为
      encoding\u symbols\u tab[x][k]

假设
x
是第一个维度(共500个),而
k
是第二个维度(共1024个)。

如何填充
编码符号选项卡?它包含什么?请尝试
((char**)encoding_symbols_tab)[0][k]
FYI,您不需要强制转换
malloc()
(或
calloc()
)的返回值。