转换为std :: string并在一行中获取const char *
Convert to std::string and get const char * in one line
我有一个数字需要转换为 const char *
(我正在使用的API需要const char *
作为其许多功能的输入)。以下工作:
int num = 5;
std::string s = std::to_string(5);
const char * p = s.c_str();
如如何从int转换为char*的答案所建议的):
int num = 5;
const char * p = std::to_string(num).c_str();
我可以做到这一点吗?为什么第二个示例不起作用?这种行为与如果我犯了这个明显的错误会发生什么:
const char * p;
{
std::string tempStr( "hi" );
p = tempStr.c_str( );
// p points to "hi" string.
}
// now p points to "" string.
这使我怀疑问题std::to_string(num)
立即出现在范围或类似的范围或类似范围中,因为它不用于直接初始化任何内容。
std::string
封装了管理动态内存(使用new[]
和delete[]
创建)。让我们分解。
const char * p = std::to_string(num).c_str();
- 创建一个
std::string
(具有num
的人类可读表示)。 - 将
new[]
ly分配给字符串的const char*
。 - 将该值分配给
p
。 - 销毁
std::string
→delete[]
分配的const char*
。 -
p
指向...交易数据
如果您使用的是指针,则指针指向的数据必须在该指针的整个生命周期内存在。
所以,不,除了new[]
副本的副本外,没有其他办法,您将不得不在稍后明确 delete[]
。那时,您已经用洗澡了,不需要使用std::string
。
创建一个至少要引用其内部数据的字符串。
只需使用 std::string
,它可以完成您想要的一切以及如果不使用它必须手动做的一切。
当您需要将const char*
传递给const char*
功能时,只需使用std::string::c_str()
这样的CC_23:
some_api_function(mystring.c_str()); // passes a const char*
您需要的是返回char*
的函数,该函数可容纳您的价值,可用于管理其寿命。有问题的版本被打破了,因为char*
指向其无法管理的内存。
例如:
std::unique_ptr<char[]> str(int32_t x)
{
std::unique_ptr<char[]> res(new char[12]);
snprintf(res.get(), 12, "%d", x);
return res;
}
在各处使用std::string
,并且不使用nessecary时不要使用const char*
。他们基本上是同一回事。我仅在使用文件路径时才使用const char*
。 到处使用std::string
,您的程序应起作用。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 从 stdio 获取一行空格分隔的整数,而不知道它们是多少 (C++)
- 在获取从文件到矢量的每一行之后,数字将被更改或销毁
- 如何交替从文件中获取一行数据和一个整数?
- 无法在同一行上获取输出,在 C++ 中两个输出之间有空格
- getline 无法获取文件的第一行
- C++矩阵-获取列数,其中最低值与后面列中最高值位于同一行
- 转换为std :: string并在一行中获取const char *
- 获取QTEXTEDIT中每一行的大小
- 获取一行字符串并转换为浮点列表
- 如何使用预处理器从源文件中获取一行文本
- std::vector<char>并获取一个定界字符的下一行
- 获取一些设置字符后的下一行
- c++ cin.获取一行到字符数组
- 如何在C++中在同一行中获取多个输入
- 如何从文件中获取下一行