У меня есть структура с полем unsigned char[16]
, который я бы хотел инициализировать нулями. Следующий (сильно упрощен) код компилируется нормально с лязгом (OS X):Как инициализировать массив unsigned char из строкового литерала?
struct GUID {
unsigned char bytes[16];
GUID() : bytes("\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0") {};
}
Примечание Я использую 15 \0
потому, что 16-й является нулевым терминатором строки буквальной, и лязг жалуется, если инициализировать строку с слишком много байтов.
Теперь, когда я пытаюсь скомпилировать с помощью GCC 4.5.3 (Cygwin), я получаю:
error: incompatible types in assignment of 'const char [16]' to 'unsigned char [16]'
Почему это не работает, и как я могу заставить его работать? (Я мог бы, очевидно, прокрутить массив в конструкторе, но я хотел бы использовать список инициализации, если это возможно, и я хотел бы понять, почему он работает в одном компиляторе, но не в другом.)
Правильно, это, наверное, самое чистое решение и что я буду делать. – jdm
Нет, для вашего конкретного случая лучшим решением является решение DeadMG. –
@Haroogan: Является ли массив гарантированным заполнением нулями, если я делаю байты()? – jdm