由于错误的strcmp参数处理而生成警告

use*_*318 2 c c++ clang

所以我有一个

unsigned char * pMyPtr 
Run Code Online (Sandbox Code Playgroud)

分配给某事.

然后我想将它与任意字符串进行比较

strcmp(const char* , const char* )
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,clang编译器告诉我

warning: passing (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign

如何删除此警告?

Mic*_*urr 6

对于这个问题的所有评论,我觉得我错过了一些东西.

我知道演员阵容不合时宜,但不是以下简单的解决方法吗?

strcmp((const char*) pMyPtr , whatever_is_being_compared)
Run Code Online (Sandbox Code Playgroud)

  • @juanchopanza:哪里会签名整数溢出在这里发挥作用? (2认同)
  • @juanchopanza:它没有将`unsigned char`转换为`char`; 它将指向`unsigned char`的指针转换为指向`char`的指针.实际上,这将重新解释指向的字节数组中的位.我认为一个已经设置了位的`signed char`被允许成为一个陷阱表示(至少在一个补码机器上),所以reinterpret_cast在技术上是不安全的,但实际上可能有一些陷阱0377字符的补充机器甚至比陷入整数溢出的机器更罕见. (2认同)

Dav*_*nan 5

它甚至没有签名.在它背后,是一个结构.

这意味着你不能strcmp在这里使用.strcmp当输入数据是以null结尾的字符串时,您可以使用.当输入数据是结构时,情况并非如此.也许您应该考虑memcmp,或者您可能需要将结构作为结构进行比较.