2011-06-20 4 views
1

以下のコードについて警告が表示されます。警告: '__builtin___strncpy_chk'の引数1を渡す際のポインタターゲットが符号付きで異なる

//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); 

警告:「_ 組み込み __strncpy_chk」の引数1を通過中のポインタターゲットが符合

に異なるIから記憶していたから値もuint8_tであり、それは上で格納されますuint8_t.whatもこの警告の原因となる可能性があります。 ありがとうございます。

+0

この質問が回答されたようですが、あなたは同意しないのですか? – karlphillip

答えて

4

実際には、あなたのコードは、 int8_t(符号付き整数)とないuint8_t(unsigned int型)を定義しています。あなたはそれを見つけましたか?

あなたがあなたの変数を変更する必要があります。

uint8_t chTemp[EVENT_ID_DESCRIPTION_LEN + 1]; 
1

代わりにmemcpyを使用できませんか?あなたが考えるよう

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

はCで、3種類のcharunsigned charsigned charはすべて異なっている、とstrncpycharを期待していることを忘れないでくださいint8_tsigned charと定義されている場合、競合するタイプがあります。実際の使用に最適char、非?

関連する問題