У меня есть структура с массивом символов внутри него, однако я не могу найти достойный способ ее инициализации, если строка становится длиннее.Инициализировать массивы символов из строкового литерала
struct T
{
char id[4];
};
T t{ 'a','b', 'c','d'}; // case 1: OK
T t{"abcd"}; // case 2: ERROR, "abcd" size is 5, too long for id
Я получаю ниже ошибки:
error: initializer-string for array of chars is too long [-fpermissive]
T t{"abcd"};
Причина заключается в том, что строка "ABCD" содержит нуль-терминатор, поэтому размер 5.
Этот синтаксис разрешен C99 string literals, как может Я работаю в C++ 11?
Возможно временное решение взять строку ac в конструкторе и скопировать 4 символа из него, но будьте осторожны, если он меньше. –
@NeilKirk извините, забыл упомянуть, что тип T является третьей стороной lib, я не могу это изменить. – billz
Звучит не очень качественная сторонняя библиотека, или, может быть, вы просто что-то пропустили в API. Если это действительно так плохо, почему бы не извлечь из него свой собственный класс, чтобы вы могли добавить все «приятные» вещи, которые вы хотите использовать для интерфейса? –