присоединение 2 const char*s c++


Как я могу объединить два постоянных символа в третий?

Я пытаюсь сделать это с помощью этого кода:

const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
const char* nName;
int num_chars = asprintf(&nName, "%s%s", "Somebody known as ", pName);

Но я получаю эту ошибку:

'asprintf': identifier not found

Я включаю stdio.h через этот код:

#include <stdio.h>
4   2  

4 ответа:

Просто, Просто используйте C++:

const char* pName = "Foo"
std::string name("Somebody known as ");
name += pName;

const char* nName = name.c_str();

asprintf является расширением GNU. Вы можете вместо этого использовать snprintf, или strncat, но вы должны будете сами справиться с управлением памятью: asprintf выделяет результат для вас.

Лучше использовать std:string, что значительно упростит работу с кодом.

Sprintf (snprintf) или strcat(strncat). функции sprintf.

sprintf(nName, "%s%s", "Somebody known as ", pName);

Strcat.

strcpy(nName, "Somebody known as ");
strcat(nName, pName);

Я предположу, что вы используете C, кроме того, что вы пометили этот вопрос как C++. Если вам нужен C++, смотрите ответ Лучиана.

Ошибок в коде немного - большая ошибка заключается в том, что вы не выделили память для строки, указывающей на pName. Вторая ошибка заключается в том, что вы берете адрес переменной nName, а не адрес зарезервированного места памяти в функции asprintf. Третья ошибка заключается в том, что функция asprintf не является стандартной функцией C, но расширением GNU, и она может не доступен на вашем компиляторе (вы не сказали, который из них): http://linux.die.net/man/3/asprintf

Вы должны использовать что-то вроде этого:

#include <stdio.h>
const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
char nName[30];
int num_chars = sprintf(nName, "%s%s", "Somebody known as ", pName);

Edit : теперь я прочитал больше о функции asprintf. Вы должны передать адрес вашего указателя в asprintf, но он должен быть не const char *, а char*, так как расположение памяти, на которое он указывает, изменится после выделения достаточного количества памяти в asprintf.