C++ 在无符号字符数组和有符号字符数组上使用strlen时发出警告
我不明白为什么最后两行会使用strlen()引起警告。编译器不应该忽略这些吗C++ 在无符号字符数组和有符号字符数组上使用strlen时发出警告,c++,c,string,function,compiler-warnings,C++,C,String,Function,Compiler Warnings,我不明白为什么最后两行会使用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 */ l
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 */
因为原型是: 尺寸(常量字符*str) 如合同上所述 这些行中正在发生隐式转换,因此警告。请在此处阅读更多信息:
正如皮特·贝克尔所说:
“
char
到unsigned char
涉及隐式转换。unsigned char*
到char*
,如问题中的代码,无效,需要诊断。”char
到unsigned char
涉及隐式转换<代码>无符号字符*到字符*
,如问题中的代码中所示,无效,需要进行诊断。发出诊断(在本例中为警告)后,编译器可以继续编译代码,并具有特定于实现的含义。@PeteBecker。这会导致安全漏洞吗?谢谢@PeteBecker,我在答案中加入了这一点,当然,如果你不介意的话!:)为什么编译器会忽略这些char*
、signed char*
和unsigned char*
是不兼容的类型。从形式上讲,这是一个“错误”,而不是一个“警告”。