void表达式的使用无效;从void指针指向的数组复制信息;到char指针指向的数组

时间:2012-04-10 20:59:54

标签: c compiler-errors

我想在symbols_and_header中存储encoding_symbols_tab [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表达式' 我应该如何更改代码以解决此问题(不改变'void ** encoding_symbols_tab'的类型)。 这是一个C程序。

2 个答案:

答案 0 :(得分:1)

使用

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

答案 1 :(得分:1)

如果encoding_symbols_tab指向字符,为什么要将其声明为指向void *?您不能取消引用void *指针,因为它不指向任何类型的数据。

您可以声明char **encoding_symbols_tab而不是void **encoding_symbols_tab,但首先要确保它真正指向的是什么。在你的问题中,你建议它可能是别的东西:

  • 如果encoding_symbols_tab指向500 * 1024个字符(即512000个字符)的平面数组,那么您必须:
    • encoding_symbols_tab声明为char *
    • 将其元素引用为encoding_symbols_tab[x*1024+k]
  • 如果encoding_symbols_tab指向500个char *指针的数组,这些指针本身都指向1024个字符的数组,那么您必须:
    • encoding_symbols_tab声明为char **
    • 将其元素引用为encoding_symbols_tab[x][k]

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