Struct с множественным массивом - PullRequest
0 голосов
/ 15 апреля 2019

У меня небольшая проблема с массивами в структуре.Мне нужна (постоянная) структура массива char с длиной 2. Они будут командой моего сообщения uart (2 символа).

Когда я распечатаю значение массива 2 символа, все символы после этой точки будутбыть напечатанным.Но мне нужно только 2 пункта, как можно, если сделать это правильно.

Всего у меня будет около 125 инструкций

struct Test_struct {
 char a[2]={'a','a'};
 char b[2]={'b','b'};
 char c[2]={'c','c'};
};
const struct Test_struct Test;
Tfunc(Test.b);


void Tfunc(const char *funct)
{
  cout << funct;
}

простой способ составить список инструкций.1 инструкция - это символ из 2 элементов.

в дальнейшем мне нравится использовать что-то подобное.Идентификатор Command.Network.ID будет моим символом 2. Сеть будет структурой, содержащей все сетевые команды.Другим списком команд будет Security или IO, ... и глобальная команда struct.Это должна быть структура.

, пока я программирую, мне нравится вводить команду.и выберите подгруппу и выберите инструкцию.Тогда мне не нужно искать в большом списке.мне не нравится: const char [2] ID = ... const char [2]…

У вас есть какие-нибудь советы?Thnx

1 Ответ

0 голосов
/ 15 апреля 2019

Оператор << в std::cout ожидает, что char* завершится нулем. Ваши массивы char не имеют нулевого терминатора, поэтому он просто продолжит печать, пока не встретит 0 в памяти (или не произойдет сбой). Если все, что вам нужно, это иметь набор глобальных констант для различных команд, рассмотрите возможность использования, например, пространства имен с набором std::string_view констант вместо:

#include <string_view>

namespace Commands
{
    using namespace std::literals;

    inline constexpr auto a = "aa"sv;
    inline constexpr auto b = "bb"sv;
    inline constexpr auto c = "cc"sv;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...