предупреждение: цели указателя при передаче аргумента 1 из __builtin___strncpy_chk отличаются по подписи - PullRequest
1 голос
/ 20 июня 2011

Я получаю предупреждение для приведенного ниже кода.

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

предупреждение: цели указателя в передаваемом аргументе 1 из '_ встроенный __ strncpy_chk' отличаются по знаку

Значение, из которого я сохраняю, также является uint8_t, и оно сохраняется на также uint8_t. Что может быть причиной этого предупреждения. Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 20 июня 2011

На самом деле, ваш код определяет int8_t (со знаком int), а не uint8_t (без знака int), как вы думаете.Вы заметили это?

Вы должны изменить свою переменную на:

uint8_t  chTemp[EVENT_ID_DESCRIPTION_LEN + 1];
3 голосов
/ 20 июня 2011

Помните, что в C три типа char, unsigned char и signed char все различны, и strncpy ожидает char. Если ваш int8_t определен как signed char, у вас есть конфликтующие типы. Лучше всего использовать фактический char, а не?

1 голос
/ 20 июня 2011

Разве вы не можете использовать memcpy вместо?

memcpy(chTemp, pMsg->st.aDescriptions[nIndex].szDescription, EVENT_ID_DESCRIPTION_LEN);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...