【问题标题】:cast to pointer from integer of different size [-Wint-to-pointer-cast]从不同大小的整数转换为指针 [-Wint-to-pointer-cast]
【发布时间】:2012-02-05 05:36:55
【问题描述】:

好吧,我必须重新提出一个以前在这里回答过的问题。由于其他原因,我进行了一些更改,现在我又遇到了问题。以下是相关细节:

volatile char RxBuffer1[NEMA_BUFFER_LENGTH];
uint32_t NEMA_TypeStart;
char NEMA_Type[10];
uint32_t len;
...

memcpy(NEMA_Type,(const char*)RxBuffer1[NEMA_TypeStart], len);

通过演员表,我得到了主题行中显示的错误。没有演员表我得到:

传递 'memcpy' 的参数 2 使指针从没有 a 演员表

请注意,如果我改用 strncpy,也会发生同样的事情。所以我很难过。我以为我明白 memcpy 使用 void*。我做错了什么?

【问题讨论】:

    标签: c casting memcpy strncpy


    【解决方案1】:

    您需要将地址传递给memcpy。我会假设你想要:

    memcpy(NEMA_Type,(const char*) &RxBuffer1[NEMA_TypeStart], len);
    

    【讨论】:

    • 你的答案是正确的。谢谢你。我想我是试图学习禁食的受害者。我(想)我知道字符串变量确实是 C 中的指针。换句话说,我认为 RxBuffer1[n] == &RxBuffer1 + n
    • RxBuffer 不是字符串,而是数组。例如,您可以使用Rxbuffer[2]=RxBuffer[0],因此这些必须是数组元素的值。
    • 不要把演员表放在那里,这只会分散问题的注意力
    • 实际上强制转换是必要的,因为缓冲区是不稳定的。
    【解决方案2】:

    已经有一段时间了,但我认为你需要改为这样说......

    memcpy(NEMA_Type, &RxBuffer1[NEMA_TypeStart], len);
    

    你也可以说...

    memcpy(NEMA_Type, RxBuffer1 + NEMA_TypeStart, len);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-04
      • 2015-06-04
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2014-03-20
      相关资源
      最近更新 更多