我收到以下代码的警告。
//someother class
#define EVENT_ID_DESCRIPTION_LEN 64
struct FILE_DESCRIPTIONS
{
uint32_t uFileID;
uint32_t uDescriptionLen;
int8_t szDescription[FILE_ID_DESCRIPTION_LEN];
};
//defined inside a function of someother class
int8_t chTemp[EVENT_ID_DESCRIPTION_LEN + 1];
strncpy(chTemp,pMsg->st.aDescriptions[nIndex].szDescription,EVENT_ID_DESCRIPTION_LEN);
警告:传递“_ builtin __ strncpy_chk”参数1的指针目标在签名方面有所不同
我从中存储的值也是uint8_t,并且存储到的值也是uint8_t。这可能是导致此警告的原因。 提前谢谢。
答案 0 :(得分:4)
实际上,您的代码正在定义 int8_t (signed int)而不是 uint8_t (unsigned int)。你发现了吗?
您必须将变量更改为:
uint8_t chTemp[EVENT_ID_DESCRIPTION_LEN + 1];
答案 1 :(得分:3)
请记住,在C中,char
,unsigned char
和signed char
这三种类型都是不同的,strncpy
需要char
。如果您的int8_t
定义为signed char
,则表示您的类型存在冲突。最好使用实际的char
,非?
答案 2 :(得分:1)
您不能使用memcpy
吗?
memcpy(chTemp, pMsg->st.aDescriptions[nIndex].szDescription, EVENT_ID_DESCRIPTION_LEN);