для char*
вам нужно создать другую переменную, которая достаточно длинна для обоих, например.Вы можете «зафиксировать» длину выходной строки, чтобы исключить возможность превышения конца строки.Если вы сделаете это, будьте осторожны, чтобы сделать это достаточно большим, чтобы вместить целое число, в противном случае вы можете найти, что книга + 50 и книга + 502 обе получаются как книга + 50 (усечение).
Вот каквручную рассчитать объем необходимой памяти.Это наиболее эффективно, но подвержено ошибкам.
int a = 5;
char* ch1 = "Book";
int intVarSize = 11; // assumes 32-bit integer, in decimal, with possible leading -
int newStringLen = strlen(ch1) + intVarSize + 1; // 1 for the null terminator
char* ch2 = malloc(newStringLen);
if (ch2 == 0) { exit 1; }
snprintf(ch2, intVarSize, "%s%i", ch1, a);
ch2 теперь содержит объединенный текст.
В качестве альтернативы, и немного менее сложно, а также более красиво (но менее эффективно), вы также можете сделать«пробный запуск» printf для получения необходимой длины:
int a = 5;
char* ch1 = "Book";
// do a trial run of snprintf with max length set to zero - this returns the number of bytes printed, but does not include the one byte null terminator (so add 1)
int newStringLen = 1 + snprintf(0, 0, "%s%i", ch1, a);
char* ch2 = malloc(newStringLen);
if (ch2 == 0) { exit 1; }
// do the actual printf with real parameters.
snprintf(ch2, newStringLen, "%s%i", ch1, a);
, если ваша платформа включает asprintf, тогда это намного проще, поскольку asprintf автоматически выделяет правильный объем памяти для вашей новой строки.
int a = 5;
char* ch1 = "Book";
char* ch2;
asprintf(ch2, "%s%i", ch1, a);
ch2 теперь содержит комбинированный текст.
c ++ гораздо менее сложен, но я оставлю это другим, чтобы описать.