【问题标题】:How to do type casting for the below expression如何为以下表达式进行类型转换
【发布时间】:2023-03-22 20:18:01
【问题描述】:

我正在尝试使用以下表达式将内存重新分配给我的表。但我总是收到以下错误。请告诉我。

typedef char *OFAttribs[6];
 OFAttribs *tmp = realloc(pTable, sizeof(*tmp) * (nTableLen+1));

Error: invalid conversion from âvoid*â to âchar* (*)[6]â

【问题讨论】:

  • 你定义了一个指向数组的指针。数组本质上也是指针。所以你的类型是一个指向指针的指针。然后你声明了一个指向该类型的指针。你确定这就是你想要的吗?
  • @AE:数组是不是指针,而这里的OFAttribs类型绝对是不是指向指针的指针。
  • @caf 如果您尝试将 int a[2]; int b = a; 编译为 C++,您将从 gcc invalid conversion from 'int*' to 'int' 收到以下错误。所以在这种情况下,'a' 确实是一个指向 int 的指针。
  • @AE:在不是一元&sizeof 的主题的表达式中,数组计算为指向其第一个元素的指针,但那不是它的。如果您将其更改为 int b = &a;,则可以看到这一点 - 错误将显示来自 int (*)[2] 的无效转换,not int **。这说明a的实际类型是int [2]

标签: c string error-handling realloc


【解决方案1】:

试试这个:

OFAttribs *tmp = (OFAttribs*) realloc(pTable, sizeof(*tmp) * (nTableLen+1));

【讨论】:

    【解决方案2】:

    您显示的代码是有效的 C。您确定您没有错误地在 C++ 模式下编译,其中 void * 不能隐式转换为其他指针类型?

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多