只是想知道這是否可能,使一個字符串字等於一個字符?
我想要一個字符串輸入等於一個字符,當輸入按鈕被按下時。
所以在頂部我限定WLAN_SSID
#define WLAN_SSID "abc"
我還初始化取決於按下設備上的按鈕,其改變輸入。
String input = "abcdefg";
和下方某處的代碼,我有:
char *ssid = WLAN_SSID;
我需要* SSID留爲char,但反正是有使之等於字符串「輸入」?
感謝
只是想知道這是否可能,使一個字符串字等於一個字符?
我想要一個字符串輸入等於一個字符,當輸入按鈕被按下時。
所以在頂部我限定WLAN_SSID
#define WLAN_SSID "abc"
我還初始化取決於按下設備上的按鈕,其改變輸入。
String input = "abcdefg";
和下方某處的代碼,我有:
char *ssid = WLAN_SSID;
我需要* SSID留爲char,但反正是有使之等於字符串「輸入」?
感謝
你當然不能分配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是肯定的。
'新[]'會在C++更好(如果它不是在GNU工具鏈AVR誠然打破)...... – 2013-12-14 20:13:49
@ IgnacioVazquez - 艾布拉姆斯:自稱「C++」的任何系統以支持上述內容,即使可能有必要使用自定義類和函數來檢測標準庫設施。 ......這與van Neumann架構無關:C++標準要求功能。 –