strcat вставить вторую строку в начале первой строки
Я использую strcat()
соединить две строки, такие как:
#include <string.h>
#include <stdio.h>
int main(int argc, char *args[])
{
char *str1; // "456"
char *str2; // "123"
strcat(str1,str2);
printf("%s",str1);
}
я получил:
456123
но мне нужна вторая строка в начале первой строки, например:
123456
как мне это сделать?
7 ответов
Делать strcat(str2,str1);
, переключите параметры. Но вы получите результирующую строку в str2
, который вы можете установить str1
если вы действительно хотите использовать str1
дальше в вашей программе.
Тем не менее, вам необходимо соответствующим образом позаботиться о доступной памяти в str2
,
Если вы хотите изменить str1
тогда сделай это
char *tmp = strdup(str1);
strcpy(str1, str2); //Put str2 or anyother string that you want at the begining
strcat(str1, tmp); //concatenate previous str1
...
free(tmp); //free the memory
Пытаться
sprintf()
чтобы напечатать новое значение в первой строке
sprintf(str1,"%s%s",str2,str1);
Попробуйте использовать это со статическими размерами массивов, работает для меня в моем проекте.
void strbeg(char* strReceive, char* strInsert)
{
int strInsertLength = strlen(strInsert);
int strReceiveLength = strlen(strReceive);
for(int i = strReceiveLength; i >= 0; i--)
{
strReceive[i + strInsertLength] = strReceive[i];
}
for(int i = 0; i < strInsertLength; i++)
{
strReceive[i] = strInsert[i];
}
}
Дословно от man strcat
:
char * strcat (char * dest, const char * src);
ОПИСАНИЕ
Функция strcat() добавляет строку src к строке dest, перезаписывая нулевой байт ('\0') в конце dest, а затем добавляет завершающий нулевой байт. Строки могут не перекрываться, и в строке dest должно быть достаточно места для результата.
Как программисту нужно убедиться, что указатель char * dest
ссылки достаточно действительной памяти, чтобы держать дополнительную char
s, которые будут скопированы откуда char* src
указывает на.
Успешно префикс str1
с str2
объявить их следующим образом:
char str2[3 + 1] = "123"; // three for "123" plus 1 for the terminating 0
char str1[2 + 3 + 1] = "46"; // 2 for "46" plus 3 for "123" plus 1 for the terminating zero
на самом деле соединить два char
массивы делают так:
strcat(str1, str2);
Если вы ошиблись в этом, потому что у вас есть две нераспределенные строки разных размеров, возможно, это решит проблему. Сначала я вычислил разницу размеров, чтобы выделить первую строку большего размера (в которой [заполнение] будет объединено в начале). Затем добавил код @Rohan.
if (len1 < len2) {
char *tmp = strdup(num1);
num1 = (char *) malloc(sizeof(char) * (strlen(num1) + diff));
strcpy(num1, padding);
strcat(num1, tmp);
printf("%s\n", num1);
free(tmp);
}
Если вы хотите добавить только один символ:
char *add_char_to_beginning(char c, char **str)
{
char *tmp = strdup(*str);
*str = (char *) realloc(*str, sizeof(char) * (strlen(*str) + 2));
*(str[0]) = c;
strcpy(*str + 1, tmp);
free(tmp);
return *str;
}