3

我正在用 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)来构造一个带有整数变量的字符串?

4

3 回答 3

13

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

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

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

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

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

C方式,使用sprintf等。

于 2012-06-09T04:55:58.793 回答
3

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

  1. your_string.c-str()-- 但这并没有真正转换,它只是为您提供一个指向缓冲区的指针,该缓冲区(临时)包含与字符串相同的内容。
  2. 是的,以上,foo.str().c_str()
  3. 是的,但通常最好避免此类事情。你基本上会陷入“真正的程序员可以用任何语言编写 C”的陷阱。
于 2012-06-09T04:58:30.443 回答
-1
  1. 这真的很简单

    #include <afx.h>
    std::string s("Hello");
    CString cs(s.c_str());
    
  2. 你可以使用sprintf来格式化一个 c 风格的字符串

于 2012-06-09T04:57:27.617 回答