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

时间:2012-06-09 04:47:06

标签: c++ string cstring stdstring

我用C ++编程。

基本上这个问题我似乎无法在任何地方找到答案。所以这就是问题所在:

我想创建一个C风格的字符串,但是我想将一个整数变量i放入字符串中。很自然地,我使用了一个流:

stringstream foo;
foo
                << "blah blah blah blah... i = " 
                << i
                << " blah blah... ";

但是,我需要以某种方式获得一个C风格的字符串传递给一个函数(原来foo.str()返回一个std :: string)。所以这在技术上是一个三部分问题 -

1)如何将std :: string转换为C风格的字符串?

2)有没有办法从字符串流中获取C风格的字符串?

3)有没有办法直接使用C风格的字符串(不使用stringstreams)来构造一个包含整数变量的字符串?

3 个答案:

答案 0 :(得分:11)

  

1)如何将std :: string转换为C风格的字符串?

只需致电string.c_str()即可获得char const*。如果您需要可变 _C-style_字符串,请复制。只要您不调用string的任何非const 函数,返回的 C字符串就会有效。

  

2)有没有办法从字符串流中获取C风格的字符串?

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

  

3)有没有办法直接使用C风格的字符串(不使用stringstreams)来构造一个包含整数变量的字符串?

C way ,使用sprintf等。

答案 1 :(得分:3)

你到了一半。您需要foo.str().c_str();

  1. your_string.c-str() - 但这并没有真正转换,它只是给你一个指向缓冲区的指针(暂时)保存与字符串相同的内容。
  2. 是的,上面是foo.str().c_str()
  3. 是的,但你最好避免这些事情。你基本上应该是“真正的程序员可以用任何语言写C”陷阱。

答案 2 :(得分:-1)

  1. 这很简单

    #include <afx.h>
    std::string s("Hello");
    CString cs(s.c_str());
    
  2. 没有

  3. 你可以使用sprintf格式化c风格的字符串