сделать строковое слово равным символу?

просто интересно, возможно ли это,

Я хотел бы, чтобы строка ввода равнялась символу при нажатии кнопки ввода.

поэтому в верхней части я определяю WLAN_SSID

#define WLAN_SSID       "abc"

Я также инициализировал ввод, который изменяется в зависимости от кнопок, нажимаемых на устройстве.

String input = "abcdefg";

и где-то ниже в коде у меня есть:

char *ssid = WLAN_SSID;

Мне нужно, чтобы * ssid оставался как char, но есть ли способ сделать его равным строковому ‘input’?

Спасибо

0

Решение

Ты конечно не могу назначать WLAN_SSID к char* потому что строковые литералы имеют тип char const[N] (с подходящим N) которые счастливо распадаются char const*но отказываются быть назначенными на char*s. Если вам действительно нужно иметь дело с char*вам нужно выделить достаточно места и скопировать значение в эту память. Конечно, при его изменении вам также необходимо освободить память соответствующим образом. Например

char* make_ssid(char const* value) {
static std::unique_ptr<char[]> memory;
std::size_t n = strlen(value);
memory.reset(new char[n + 1]);
strncpy(memory.get(), value, n + 1);
return memory.get();
}
char* ssid = make_ssid(WLAN_SSID);
1

Другие решения

Сначала вам нужно выделить место для char[],

ssid = malloc(sizeof(char) * (input.length() + 1));

Тогда вам нужно использовать String::toCharArray() скопировать символы в буфер.

input.toCharArray(ssid, input.length());

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

free(ssid);

Возможно, вам также придется отказаться от первоначальной стоимости ssid прежде чем использовать его, но я не знаю достаточно об Arduino, чтобы быть уверенным.

0