[英]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库函数,例如strdup
, strlen
等。 必须非常小心地使用它们,因为错过终结器很容易发生,这很容易偶然发生,并且可能以缓冲区溢出错误的形式导致巨大的问题。
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.