繁体   English   中英

"char* 和 std::string 和 const char* 之间的转换"

[英]conversion between char* and std::string and const char*

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

另外,我尝试将输入类型用作 char*,当我输入像“hello”这样的字符串时,会出现错误 [ISO C++11 不允许从字符串文字转换为 'char ' [-Wwritable-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是因为不允许您对其进行更改,否则更改它们会导致巨大的问题。

你真的没有“转换”不过,你只需要使用char* ,你会const char*

std::string A = "hello"; //< assignment from char* to string
const char* const B = A.c_str(); //< call c_str() method to access the C string
std::string C = B; //< assignment works just fine (with allocation though!)

printf("%s", C.c_str()); //< pass to printf via %s & c_str() method

C\/C++ 方便的数据类型交换函数。 在这个 repo 中有所有 c++ 数据类型的便利函数,我把它们都写在 python 中。

使用这个回购:

https:\/\/github.com\/azizovrafael\/Simple-CPlusPlus<\/a>

例子:

...

int main(){
   int n = INT(INPUT("Write Some Text For Console Ex. (Enter: )"));
   string str = STR(n);
 
   return 0;
}

...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM