c++ - 字符串转char*函数

标签 c++ pointers arduino c-strings

对 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;
    }
}

没有多大意义,它按值获取字符串并返回指向其内部缓冲区的指针,并用 cased away constnes(不要这样做)。当你返回已经被销毁的对象的值时,你会得到一些奇怪的行为,通过 ref 传递它。我也很好奇为什么你需要做所有这些事情,你不能直接通过:

Serial.println(string1.c_str());
Serial.println(string2.c_str());

关于c++ - 字符串转char*函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50414164/

相关文章:

c - 用 C 验证条形码

Arduino:结构指针作为函数参数

*不*初始化其成员的C++ vector ?

C++11 完美转发和引用折叠

c++ - 指针内存分配

c++ - 在 C++ 中强制删除 std::shared_ptr

c++ - 通过一次安装生成静态库和可执行文件(autoconf)

c++ - 生成大小不是 16 的倍数的加密数据

c++ - 检查串行端口信息/描述以验证正确的端口

c++ - 如何在 Arduino Eclipse IDE 中设置编译器选项?