How to convert an std::string to C-style string [duplicate]

走远了吗. 提交于 2019-12-13 18:37:01

问题


I am programming in C++.

As basic as this question is I cannot seem to find an answer for it anywhere. So here is the problem:

I want to create a C-style string however I want to put an integer variable i into the string. So naturally, I used a stream:

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

However, I need to somehow get a C-style string to pass to a function (turns out foo.str() returns an std::string). So this is technically a three part question --

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

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

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?


回答1:


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

Simply call string.c_str() to get a char const*. If you need a mutable _C-style_ string then make a copy. The returned C string will be valid as long as you don't call any non-const function of string.

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

There is, simply strstream.str().c_str(). The returned C string will be valid only until the end of the expression that contains it, that means that is valid to use it as a function argument but not to be stored in a variable for later access.

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?

There is the C way, using sprintf and the like.




回答2:


You got halfway there. You need foo.str().c_str();

  1. your_string.c-str() -- but this doesn't really convert, it just gives you a pointer to a buffer that (temporarily) holds the same content as the string.
  2. Yes, above, foo.str().c_str().
  3. Yes, but you're generally better off avoiding such things. You'd basically be in the "real programmers can write C in any language" trap.



回答3:


  1. this is realy simple

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

  3. yo can use sprintf to format a c-style string



来源:https://stackoverflow.com/questions/10958437/how-to-convert-an-stdstring-to-c-style-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!