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

所以我有一个

unsigned char * pMyPtr 

分配给某事。

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

 strcmp(const char* , const char* ) 

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

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

如何删除此警告?

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

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

 strcmp((const char*) pMyPtr , whatever_is_being_compared) 

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

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

Clang无法从unsigned char*转换为const char* 。 因为unsigned char*char*不同。 通过添加unsiged您可以使用char 0to255而不是-127to127的范围。

在strcmp所在的行上,您可以使用(const char*)对unsigned char值进行类型转换,这将有效,因为它将作为const char*进行威胁。 而不是unsigned char

如果您觉得警告没有任何副作用。 你可以忽略这样的警告:

 #pragma warning( disable : 4507 34 )