strcat将第二个字符串粘贴到第一个字符串的开头

biswetbf  于 2023-06-21  发布在  其他
关注(0)|答案(7)|浏览(137)

我使用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

怎么做呢?

tp5buhyn

tp5buhyn1#

执行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
zxlwwiss

zxlwwiss2#

尝试sprintf()将新值打印到第一个字符串

sprintf(str1,"%s%s",str2,str1);
qnyhuwrf

qnyhuwrf3#

尝试使用静态大小的数组,在我的项目中为我工作。

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];
    }
}
vc9ivgsu

vc9ivgsu4#

您需要使用strcpy而不是strcat

kyvafyod

kyvafyod5#

来自man strcat的逐字记录:
char *strcat(char *dest,const char *src);
说明
strcat()函数将src字符串附加到dest字符串,覆盖dest末尾的空字节('\0'),然后添加一个终止空字节。字符串不能重叠,并且dest字符串必须有足够的空间用于结果。
作为程序员,您需要确保指针char * dest引用足够的有效内存来保存将从char* src指向的位置复制的附加char s。
要成功地将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);
8ulbf1ek

8ulbf1ek6#

如果你因为有两个大小不同的未分配字符串而在这上面segfault,也许它会解决这个问题。我首先计算了大小差异,以分配第一个具有较大大小的字符串(其中[padding]将在开始时连接)。然后添加了@罗汉的代码。

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);
}
d7v8vwbk

d7v8vwbk7#

如果你只想添加一个字符:

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;
}

相关问题