警告:传递“__builtin___strncpy_chk”参数1的指针目标在签名方面有所不同

时间:2011-06-20 16:43:00

标签: c

我收到以下代码的警告。

//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。这可能是导致此警告的原因。 提前谢谢。

3 个答案:

答案 0 :(得分:4)

实际上,您的代码正在定义 int8_t (signed int)而不是 uint8_t (unsigned int)。你发现了吗?

您必须将变量更改为:

uint8_t  chTemp[EVENT_ID_DESCRIPTION_LEN + 1];

答案 1 :(得分:3)

请记住,在C中,charunsigned charsigned char这三种类型都是不同的,strncpy需要char。如果您的int8_t定义为signed char,则表示您的类型存在冲突。最好使用实际的char,非?

答案 2 :(得分:1)

您不能使用memcpy吗?

memcpy(chTemp, pMsg->st.aDescriptions[nIndex].szDescription, EVENT_ID_DESCRIPTION_LEN);