这是我的代码,我在初始化时收到警告指针目标,其签名不同。有人可以帮我吗
const uint8_t *activity_output[4] = {"B_STILL", "B_WALk", "B_RUN", "B_UNKNOWN"};
答案 0 :(得分:0)
string literal(例如"a string"
)的类型为char[N]
。在您的计算机上,char
是signed char
。这意味着"B_STILL"
实际上是(signed char[]){"B_STILL"}
,signed char
个字节的数组。
uint8_t
(通常)是unsigned char
的typedef,并且是无符号类型。
因此,当您从uint8_t *
字符串文字中初始化"B_STILL"
指针时,您将转换char*
指针(C中的数组自动衰减为要键入的指针,即char[N]
衰减到char*
指针)变成uint8_t *
指针。因此,编译器会警告您-您将signed char*
指针转换为unsigned char*
指针,它们的唯一性不同。
可能的解决方法:
移至char。由于activity_output
是一个字符串数组(即char[]
),因此可以期望它具有char*[]
类型,即。指向字符串的指针数组。那时您的意图会很清楚。如果您稍后将其与printf("%s". ...)
一起使用,便是这种方式。
const char *activity_output[4] = {
"B_STILL",
"B_WALk",
"B_RUN",
"B_UNKNOWN"
};
显式删除指针。
const uint8_t *activity_output[4] = {
(uint8_t*)"B_STILL",
(uint8_t*)"B_WALk",
(uint8_t*)"B_RUN",
(uint8_t*)"B_UNKNOWN"
};
const uint8_t *activity_output[4] = {
(uint8_t[]){"B_STILL"},
(uint8_t[]){"B_WALk"},
(uint8_t[]){"B_RUN"},
(uint8_t[]){"B_UNKNOWN"}
};