У меня возникают проблемы с инициализацией строки фиксированного размера c с использованием фигурных скобок в Microsoft VC ++. Этого не происходит в G CC или clang. Похоже, что инициализация каждой структуры не выполняется правильно относительно адреса каждого элемента массива. Является ли это потенциально ошибкой MS, и если да, то как я могу ее обойти, сохраняя при этом фиксированный размер c строк с одинаковыми и меньшими строковыми константами?
Это можно увидеть на:
#include <stddef.h>
#include <stdio.h>
struct StringTableEntry_t
{
static constexpr size_t MAX_STRING_LENGTH = 8;
const char String[MAX_STRING_LENGTH];
};
int main()
{
static constexpr size_t STRING_TABLE_ENTRY_COUNT = 4;
static constexpr StringTableEntry_t STRING_TABLE[STRING_TABLE_ENTRY_COUNT] =
{
{ "THESE" },
{ "ARE" },
{ "TEST" },
{ "VALUES" }
};
for (size_t idx = 0; idx < STRING_TABLE_ENTRY_COUNT; ++idx)
{
printf("idx=%zu: %s\n", idx, STRING_TABLE[idx].String);
}
return 0;
}
Вывод на VC ++:
idx=0: THESE
idx=1: E
idx=2: ALUES
idx=3:
Вывод на GCC / clang:
idx=0: THESE
idx=1: ARE
idx=2: TEST
idx=3: VALUES