просто интересно, возможно ли это,
Я хотел бы, чтобы строка ввода равнялась символу при нажатии кнопки ввода.
поэтому в верхней части я определяю WLAN_SSID
#define WLAN_SSID "abc"
Я также инициализировал ввод, который изменяется в зависимости от кнопок, нажимаемых на устройстве.
String input = "abcdefg";
и где-то ниже в коде у меня есть:
char *ssid = WLAN_SSID;
Мне нужно, чтобы * ssid оставался как char, но есть ли способ сделать его равным строковому ‘input’?
Спасибо
Ты конечно не могу назначать 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);
Сначала вам нужно выделить место для char[]
,
ssid = malloc(sizeof(char) * (input.length() + 1));
Тогда вам нужно использовать String::toCharArray()
скопировать символы в буфер.
input.toCharArray(ssid, input.length());
А потом, когда вы закончите с ssid
, вам нужно сбросить память, выделенную для этого.
free(ssid);
Возможно, вам также придется отказаться от первоначальной стоимости ssid
прежде чем использовать его, но я не знаю достаточно об Arduino, чтобы быть уверенным.