问题描述
C99 | CLion 2020.3.1
"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);
如果有人能帮助我理解警告并有好的方法来修复它,那将不胜感激。
解决方法
字符串不应该是 unsigned
。将类型更改为 char arr[20]
。
警告的原因是当您使用类型为 strlen
的参数表达式时,函数 char *
需要类型为 unsigned char *
的指针,并且没有从一种类型到另一种。
只需对 char *
类型使用显式转换
size_t len = strlen( ( char * )arr);
否则将数组的元素类型从 unsigned char
类型更改为 char
类型。
最好将变量 len
声明为具有类型 size_t
,因为它是函数 strlen
的返回值的类型。