Подтвердить что ты не робот

Как конкатенировать строку и const char?

Мне нужно поставить "hello world" в c. Как я могу это сделать?

string a = "hello ";
const char *b = "world";

const char *C;
4b9b3361

Ответ 1

string a = "hello ";
const char *b = "world";
a += b;
const char *C = a.c_str();

или без изменения a:

string a = "hello ";
const char *b = "world";
string c = a + b;
const char *C = c.c_str();

Маленькое редактирование, чтобы соответствовать количеству информации, предоставленной 111111.

Если у вас уже есть string (или const char * s, но я рекомендую отнести последнее к первому), вы можете просто "суммировать" их, чтобы сформировать более длинную строку. Но если вы хотите добавить что-то большее, чем просто строку, которую вы уже имеете, вы можете использовать stringstream и operator<<, который работает точно как cout один, но не выводит текст на стандартный вывод (т.е. консоль), но для этого внутренний буфер, и вы можете использовать его .str() для получения std::string от него.

Функция

std::string::c_str() возвращает указатель на буфер const char (т.е. const char *) содержащейся в нем строки, которая заканчивается на нуль. Затем вы можете использовать его как любую другую переменную const char *.

Ответ 2

если вам просто нужно конкатенировать, используйте функции operator + и operator +=

 #include <string>
 ///...
 std::string str="foo";
 std::string str2=str+" bar";
 str+="bar";

Однако, если у вас есть много конфликтов, вы можете использовать поток строк

#include <sstream>
//...
std::string str1="hello";
std::stringstream ss;
ss << str1 << "foo" << ' ' << "bar" << 1234;
std::string str=ss.str();

EDIT: вы можете передать строку в функцию C с помощью const char * с c_str().

my_c_func(str1.c_str());

и если C func принимает не const char * или требует права собственности, вы можете сделать следующее

char *cp=std::malloc(str1.size()+1);
std::copy(str1.begin(), str2.end(), cp);
cp[str1.size()]='\0';