关于c ++:如何将std :: string转换为C风格的字符串

How to convert an std::string to C-style string

本问题已经有最佳答案,请猛点这里访问。

我是用C++编程的。

尽管这个问题很基本,但我似乎在任何地方都找不到答案。问题是:

我想创建一个C样式的字符串,但是我想将一个整型变量i放入字符串中。所以自然,我用了一条小溪:

1
2
3
4
5
stringstream foo;
foo
                <<"blah blah blah blah... i ="
                << i
                <<" blah blah...";

但是,我需要某种方式让C风格的字符串传递给函数(原来是Fo.Strand)返回一个STD::字符串。所以这是一个由三部分组成的问题--

1)如何将STD::字符串转换成C风格字符串?

2)是否有方法从Stringstream中获取C样式的字符串?

3)是否有一种直接使用C样式字符串(不使用StringStreams)来构造包含整数变量的字符串的方法?


1) How do I convert std::string to a C-style string?

只需调用string.c_str()就可以得到char const*。如果你需要一个可变的C样式的字符串,那么做一个副本。只要不调用string的任何非常量函数,返回的c字符串就有效。

2) Is there a way to get a C-style string from a stringstream?

有,简单地说就是strstream.str().c_str()。返回的C字符串只有在包含它的表达式结束时才有效,这意味着将它用作函数参数是有效的,但不能存储在变量中供以后访问。

3) Is there a way to use a C-style string directly (without using stringstreams) to construct a string with an integer variable in it?

有C方法,使用sprintf等。


你已经走到一半了。你需要foo.str().c_str();

  • your_string.c-str()--但这并不是真正的转换,它只是给您一个指向缓冲区的指针,缓冲区(暂时)保存与字符串相同的内容。
  • 是的,上面是foo.str().c_str()
  • 是的,但你一般最好避免这样的事情。你基本上会陷入"真正的程序员可以用任何语言写C"的陷阱。

  • 这真的很简单

    1
    2
    3
    #include
    std::string s("Hello");
    CString cs(s.c_str());
  • 您可以使用sprintf格式化C样式字符串