当 strlen 用于 unsigned char 数组和 signed char 数组时发出警告

warning when strlen is used on unsigned char array and signed char array

我不明白为什么最后两行使用 strlen() 会导致警告。编译器不应该忽略这些吗?

size_t len;
char cstr[] = "char string";
signed char scstr[] = "signed char string";
unsigned char ucstr[] = "unsigned char string";

len = strlen(cstr);
len = strlen(scstr);  /* warns when char is unsigned */
len = strlen(ucstr);  /* warns when char is signed */

因为原型是:

size_t strlen ( const char * str );

ref 所述。

这些行中发生了隐式转换,因此出现了警告。在这里阅读更多:How can I avoid gcc warning for plain "char" to : "unsigned char" OR "signed char" conversion?


正如皮特·贝克尔所说:

"charunsigned char 涉及隐式转换。unsigned char*char*,如问题中的代码所示,无效,需要诊断."