'C++: insert char to a string

so I am trying to insert the character, which i got from a string, to another string. Here I my actions: 1. I want to use simple:

someString.insert(somePosition, myChar);

2. I got an error, because insert requires(in my case) char* or string
3. I am converting char to char* via stringstream:

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);

4. Everything seems to be compiling successfully, but program crashes the gets to

conversion >> myCharInsert;

line.

5.I am trying to replace char* with string:

stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);

Everything seems to be OK, but when someAnotherString.at(someOtherPosition) becomes space, program crashes.

So how do I correctly do this?



Solution 1:[1]

Simplest is to provide yourself with a function that turns a character into a string. There are lots of ways of doing this, such as

string ToStr( char c ) {
   return string( 1, c );
}

Then you can simply say:

someString.insert(somePosition, ToStr(myChar) );

and use the function in other cases where you want a string but have a char.

Solution 2:[2]

  1. Everything seems to be compiling successfully, but program crashes the gets to
conversion >> myCharInsert;

The problem is that you are trying to dereference(access) myCharInsert(declared as a char* ) which is pointing to a random location in memory(which might not be inside the user's address space) and doing so is Undefined Behavior (crash on most implementations).

EDIT

To insert a char into a string use string& insert ( size_t pos1, size_t n, char c ); overload.

Extra

To convert char into a std::string read this answer

Solution 3:[3]

You can try:

std::string someString{"abc"};
someString.push_back('d');

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Community
Solution 3 ouflak