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 ссылки достаточно действительной памяти, чтобы держать дополнительную chars, которые будут скопированы откуда 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;
}

Вам нужно использовать strcpy вместо strcat,

Другие вопросы по тегам