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

30,082

Solution 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.

Solution 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.
Share:
30,082
user1413793
Author by

user1413793

Updated on June 10, 2020

Comments

  • user1413793
    user1413793 almost 4 years

    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?