Ошибка компилятора MS VC ++ - Фиксированный размер C -String Curly Brace Initializer - PullRequest
0 голосов
/ 14 июля 2020

У меня возникают проблемы с инициализацией строки фиксированного размера 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
...