I've got a const char *
returned from a processing function, and I'd like to convert/assign it to an instance of std::string
for further manipulation. This seems like it should be straight-forward, but I've not been able to find any documentation showing how it should be done. Obviously, I'm missing something. Insights appreciated.
Asked
Active
Viewed 1.6e+01k times
31

Justin Fletcher
- 2,319
- 2
- 17
- 32
-
8It's one of the constructor options, ``std::string(const char* cstr)`` – aruisdante Jun 09 '14 at 19:58
-
`std::string s = f();` – Alan Stokes Jun 09 '14 at 19:59
-
This question was caused by a problem that can no longer be reproduced or a simple typographical error. While similar questions may be on-topic here, this one was resolved in a manner unlikely to help future readers. This can often be avoided by identifying and closely inspecting the shortest program necessary to reproduce the problem before posting. – πάντα ῥεῖ Jun 09 '14 at 20:05
-
Wow, -5. I didn't think it was a terrible question... Oh well. – Justin Fletcher Jun 09 '14 at 21:06
5 Answers
62
std::string
has a constructor fromconst char *
.This means that it is legal to write:
const char* str="hello";
std::string s = str;

Ivaylo Strandjev
- 69,226
- 18
- 123
- 176
-
7Just make sure that your char * isn't NULL, or else the behavior is undefined. – Trevor Hickey Nov 06 '15 at 20:18
22
Try
const char * s = "hello";
std::string str(s);
will do the trick.

Ed Heal
- 59,252
- 17
- 87
- 127
-
1I find it amusing that we chose the same example string and almost the same(just swapped) variable names :-) – Ivaylo Strandjev Jun 09 '14 at 20:02
-
1Just make sure that your char * isn't NULL, or else the behavior is undefined. – Trevor Hickey Nov 06 '15 at 20:48
-
-
3@EdHeal It's not in your example, but a char* in general could be. I'm leaving a disclaimer for others. For example, I'm using the getenv() function. If the environment variable doesn't exist it will return a null. A check would be needed before constructing a string of that function's return value. This is relevant since OP says they "got a const char * returned from a processing function". – Trevor Hickey Nov 06 '15 at 21:02
4
You've got a lot of options:
const char* dosth() { return "hey"; }
string s1 = dosth();
string s2 (dosth());
string s3 {dosth()};
auto s4 = (string)dosth();
Note that s3
and s4
are C++11 features, if you should still work with an old or non-compliant compiler you would have to work with one of the other options.

Appleshell
- 7,088
- 6
- 47
- 96
-
-
1Just make sure that your char * isn't NULL, or else the behavior is undefined. – Trevor Hickey Nov 06 '15 at 20:48
3
std::string
has a constructor that converts const char*
implicitly. In most cases, you need to do nothing. Just pass a const char*
where a std::string
is accepted and it will work.

Fred Larson
- 60,987
- 18
- 112
- 174
-
Just make sure that your char * isn't NULL, or else the behavior is undefined. – Trevor Hickey Nov 06 '15 at 20:48
3
There are three possibilities. You can use a constructor, an assignment operator or member function assign
(if do not take into account member function insert
though it is also can be used:) )`
For example
#include <iostream>
#include <string>
const char * f() { return "Hello Fletch"; }
int main()
{
std::string s1 = f();
std::string s2;
s2 = f();
std::string s3;
s3.assign( f() );
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
std::cout << s3 << std::endl;
}

Trevor Hickey
- 36,288
- 32
- 162
- 271

Vlad from Moscow
- 301,070
- 26
- 186
- 335
-
Just make sure that your char * isn't NULL, or else the behavior is undefined. – Trevor Hickey Nov 06 '15 at 20:48