对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());

08-16 13:57