Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使字符串字等于字符?_C++_Arduino_Arduino Ide - Fatal编程技术网

C++ 使字符串字等于字符?

C++ 使字符串字等于字符?,c++,arduino,arduino-ide,C++,Arduino,Arduino Ide,只是想知道这是否可能 当按下输入按钮时,我想要一个等于字符的字符串输入 因此,在顶部我定义了WLAN_SSID #define WLAN_SSID "abc" 我还初始化了根据设备上按下的按钮而变化的输入 String input = "abcdefg"; 在我的代码下面的某个地方: char *ssid = WLAN_SSID; 我需要*ssid保持为char,但是否有方法使其等于字符串“input” 谢谢首先,您需要为字符[]分配空间 ssid = malloc(siz

只是想知道这是否可能

当按下输入按钮时,我想要一个等于字符的字符串输入

因此,在顶部我定义了WLAN_SSID

#define WLAN_SSID       "abc"
我还初始化了根据设备上按下的按钮而变化的输入

String input = "abcdefg";
在我的代码下面的某个地方:

char *ssid = WLAN_SSID;  
我需要*ssid保持为char,但是否有方法使其等于字符串“input”


谢谢

首先,您需要为
字符[]
分配空间

ssid = malloc(sizeof(char) * (input.length() + 1));
然后需要使用将字符复制到缓冲区中

input.toCharArray(ssid, input.length());
然后,当您使用完
ssid
,您需要丢弃分配给它的内存

free(ssid);
您可能还需要在重用
ssid
之前丢弃它的原始值,但我对Arduino的了解还不够,无法确定。

您当然不能将
WLAN\u ssid
分配给
char*
,因为字符串文本的类型为
char const[N]
(带有合适的
N
)它愉快地衰变为
char const*
s,但拒绝分配给
char*
s。如果确实需要处理
字符*
,则需要分配足够的空间并将值复制到此内存中。当然,在更改它时,您还需要适当地释放内存。比如说

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*make_ssid(char const*value){
静态std::唯一的ptr内存;
std::size\u t n=标准长度(值);
内存重置(新字符[n+1]);
strncpy(memory.get(),值,n+1);
返回内存。get();
}
char*ssid=生成ssid(WLAN\u ssid);

@IgnacioVazquez Abrams:任何自称为“C++”的系统都必须支持上述功能,即使可能需要为缺少的标准库设施使用自定义类和函数。。。这与诺伊曼的体系结构无关:C++标准规定了功能。<代码> NeX[]/Cord>在C++中更好(如果它不被公认地在GNU-AVR工具链中被破坏)…