当 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?
正如皮特·贝克尔所说:
"char
到 unsigned char
涉及隐式转换。unsigned char*
到 char*
,如问题中的代码所示,无效,需要诊断."
我不明白为什么最后两行使用 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?
正如皮特·贝克尔所说:
"char
到 unsigned char
涉及隐式转换。unsigned char*
到 char*
,如问题中的代码所示,无效,需要诊断."