strlen() 关于指针间转换的警告 | C99 |克莱恩

问题描述

C99 | CLion 2020.3.1

在使用 strlen() 函数时,CLion 显示警告

"Passing 'unsigned char [20]' to parameter of type 'const char *' converts between pointers to 
integer types with different sign"

不过,程序会根据需要编译和执行。

相关代码

unsigned char arr[20] = "foo";
unsigned int len = strlen(arr);

如果有人能帮助我理解警告并有好的方法来修复它,那将不胜感激。

enter image description here

解决方法

字符串不应该是 unsigned。将类型更改为 char arr[20]

,

警告的原因是当您使用类型为 strlen 的参数表达式时,函数 char * 需要类型为 unsigned char * 的指针,并且没有从一种类型到另一种。

只需对 char * 类型使用显式转换

size_t len = strlen( ( char * )arr);

否则将数组的元素类型从 unsigned char 类型更改为 char 类型。

最好将变量 len 声明为具有类型 size_t,因为它是函数 strlen 的返回值的类型。