gpt4 book ai didi

c++ - char* 与 std::string 和 const char* 之间的转换

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:20 27 4
gpt4 key购买 nike

我现在正在使用 C++ 使用 PROS 对机器人进行编程。 Pros 有一个打印函数,它接受一个 const char*。现在,我正在使用 lvgl 创建我自己的屏幕,我想复制打印功能。像 printf() 函数一样,我希望它包含可变参数来实现 %d 效果(因此它将所有 %? 转换为相应的值)。现在的问题是关于函数之间的转换。我想创建一个转换函数来将字符串和可变参数转换为完整的字符串。我需要输入一个类似“hey”的字符串,我不确定类型名称应该是什么。我需要能够获取大小,在其中搜索 %ds 但我需要函数返回一个 const char* 以传递到 lvgl 以在屏幕上弹出。我在尝试将字符串转换为 const char* 以用于转换函数的输出时遇到了麻烦。

此外,我尝试将输入类型用作 char*,当我输入像“hello”这样的字符串时,会出现错误 [ISO C++11 不允许从字符串文字转换为 'char ' [-Writable-strings]]。但是,当使用 const char 时,错误消失了。谁知道为什么?

感谢大家的热心帮助!

最佳答案

char*const char* 是同一事物的两种风格:C 风格字符串。这些是一系列带有 NUL 终止符(0 字节)的字节。要使用这些,您需要使用 C 库函数,如 strdupstrlen 等。必须非常小心使用它们,因为很容易不小心遗漏终止符,可能导致缓冲区溢出错误形式的巨大问题。

std::string 是字符串在 C++ 中的表示方式。它们的能力要强得多,它们可以支持“宽”字符或像 UTF-8 这样的可变长度字符集。由于其中没有 NUL 终止符,因此它们不会溢出并且使用起来非常安全。内存分配由标准库处理,您无需过多关注。

您可以根据需要来回转换,但通常最好尽可能多地使用 C++ 中的 std::string

从 C++ 转换为 C:

 std::string cppstring("test");
const char* c_string = cppstring.c_str();

从 C 到 C++ 的转换:

 const char* c_string = "test";
std::string cppstring(c_string);

请注意,您可以将 char*(可变)转换为 const char*(不可变),但不能反过来。有时事情被标记为 const,因为您不允许更改它们,或者更改它们会导致巨大的问题。

虽然您真的不必“转换”,您只需像使用 const char* 一样使用 char*

关于c++ - char* 与 std::string 和 const char* 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032644/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com