对c / c++来说是相当新的。我对以下代码有疑问:
char* string2char(String command){
if (command.length() != 0) {
char *p = const_cast<char*>(command.c_str());
return p;
}
}
void setup() {}
void loop() {
String string1 = "Bob";
char *string1Char = string2char(string1);
String string2 = "Ross";
char *string2Char = string2char(string2);
Serial.println(string1Char);
Serial.println(string2Char);
}
这基本上会重复输出:
Ross
Ross
我知道我没有掌握指针在这里如何工作的概念-有人可以解释吗?我将如何更改它以使其显示:
Bob
Ross
最佳答案
该功能:
char* string2char(String command){
if (command.length() != 0) {
char *p = const_cast<char*>(command.c_str());
return p;
}
}
没什么意义,它按值取字符串,并返回指向其内部缓冲区的指针,且带有常量(不做)。当您返回已被销毁的对象的值并通过ref传递它时,您将得到一些奇怪的行为。我也很好奇为什么你需要做所有这些事情,难道你不能通过:
Serial.println(string1.c_str());
Serial.println(string2.c_str());