У меня есть C SDK, который мне нужно использовать в проекте iPhone, и пример кода был написан для использования с Visual Studio.Он включает в себя использование strcpy_s, который является строковой функцией только для Microsoft.
file_header.header_size = FIT_FILE_HDR_SIZE;
strcpy_s((FIT_UINT8 *)&file_header.data_type, sizeof(".FIT"), ".FIT"); << problem!
Я пытался перейти на strcpy и strncpy, например,
strncpy((FIT_UINT8 *)&file_header.data_type, ".FIT", sizeof(".FIT"));
Но я получаю это предупреждение:
предупреждение: цели указателя при передаче аргумента 1 в ' встроенный _strncpy_chk' отличаются по знаку
предупреждение: цели указателя при передаче аргумента 1 из __inline_strncpy_chk отличаются по знаку
предупреждение: вызов встроенный _strncpy_chk всегда будет переполнять целевой буфер
Структура file_header выглядит так:
typedef struct
{
FIT_UINT8 header_size; // FIT_FILE_HDR_SIZE (size of this structure)
FIT_UINT8 protocol_version; // FIT_PROTOCOL_VERSION
FIT_UINT16 profile_version; // FIT_PROFILE_VERSION
FIT_UINT32 data_size; // Does not include file header or crc. Little endian format.
FIT_UINT8 data_type[4]; // ".FIT"
} FIT_FILE_HDR;
FIT_UINT8 is typedef Беззнаковый символ.
Итак, мы можем видеть, что ему дано значение 4 в typedef, и strcpy_s берет data_type по ссылке и копирует в него ".FIT".Где я не так с strncpy?Если вы еще не догадались, я не большой программист на C:)
Edit: это не дает мне ошибки, но это правильно?
strncpy((void *)&file_header.data_type, ".FIT", sizeof(file_header.data_type));