美文网首页
C语言const void*强转unsigned char*报错

C语言const void*强转unsigned char*报错

作者: RedB | 来源:发表于2022-06-02 00:48 被阅读0次

最近在用字节的bytehook写代码时,需要修改const void *buf指向的内容,因此需要先对const的buf指针做强转去掉const:

static void encrypt(const void *buf, size_t count) {
    (void) count;
    unsigned char *_buf = (unsigned char *) buf;
}

如果这么写,就会提示error: cast from 'const void *' to 'unsigned char *' drops const qualifier [-Werror,-Wcast-qual]
虽然我也可以全局修改CMakeLists.txt,但是更好的办法是局部处理,在谷歌了半天后,找到了两个可行的方案,亲测有效:

  1. 使用#pragma,需要GCC 4.6以上
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-qual"
void foo(){
    const char* ptr = buf;
    char* q = (char*)ptr;
}
#pragma GCC diagnostic pop
  1. 其次,借助uintptr_t
#include <stdint.h>
// uintptr_t:用来存放指针地址,提供了一种可移植且安全的方法声明指针
#define UN_CONSTIFY(_t, _v) ((_t)(uintptr_t)(_v))
void foo(){
    const void* ptr = buf;
    unsigned char *_buf = UN_CONSTIFY(unsigned char *, buf);
}

相关文章

网友评论

      本文标题:C语言const void*强转unsigned char*报错

      本文链接:https://www.haomeiwen.com/subject/uobfmrtx.html