std :: to_string存储在const char *中

时间:2019-03-28 06:55:12

标签: c++ string

我需要将数字转换为字符串并将其存储到const char*中,但问题是const char*变量在赋值后为空。

在以下示例代码中,我希望看到数字输出已转换为const char*

#include <iostream>
#include <string>

int main()
{
    int number = 123;
    const char* ptr_num_string = std::to_string(number).c_str();
    std::cout << "number to string is: " <<  ptr_num_string << std::endl;
    std::cin.get();
    return 0;
}

输出为空白:

  

字符串的编号是:

如何将数字转换为const char *?

2 个答案:

答案 0 :(得分:6)

  • std::to_string返回临时 std::string
  • const本身上进行的任何非string操作都会使std::string::c_str返回的指针无效-这是因为它基本上为您提供了指向string'的指针的内部缓冲区。
  • 销毁std::string绝对是非const的操作!

因此,您不能指望将指针指向string返回的to_string,并且永远无法使用它。您首先需要保存该string的副本:

int number = 123;
std::string const numAsString = std::to_string(number);
char const* ptrToNumString = numAsString.c_str(); // use this as long as numAsString is alive

您正在做的事情称为Undefined Behaviour-这意味着您的程序无效,并且任何事情都可能发生。它可能会崩溃,可能会打印出一些垃圾,它似乎可以正常工作,每次您运行程序时都可以执行其中的一种操作……

答案 1 :(得分:1)

它不是“空白”,它指向超出范围的字符串缓冲区。因此,访问它会导致未定义的行为。您需要使字符串保持活动状态:

auto str{std::to_string(number)};
auto ptr_num_string{str.c_str()};
std::cout << "number to string is: " <<  ptr_num_string << std::endl;
相关问题