【问题标题】:strcat paste second string at beginning of first stringstrcat 在第一个字符串的开头粘贴第二个字符串
【发布时间】:2013-05-21 12:20:17
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 你的例子不清楚。 char * str1; // "456" 是什么意思?它不会产生您显示的输出,但会遇到未定义的行为,因为没有为任何字符分配内存,但 str1str2 随机指向某个地方。
  • str1是一个长字符串,我需要在开头添加另一个字符串。

标签: c string strcat


【解决方案1】:

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

【讨论】:

  • 我需要在 str1 的开头添加“”(空白)
  • @Refael,检查更新的答案。您可以更改它以附加尽可能多的字符串。
  • 哦,这假设 str1 引用了足够的内存!从你的例子中不清楚。 strcat() 只不过是一个伪智能复制功能。它肯定不是“内存区域连接器”!它确实将调用strdup() 分配的内存附加到str1 引用的内存!只有realloc() 能够扩展已分配内存的区域。
  • @alk,这假设str1 有足够的内存。
【解决方案2】:

尝试将它与静态大小的数组一起使用,在我的项目中对我有用。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      您需要使用strcpy 而不是strcat

      【讨论】:

        【解决方案5】:

        来自man strcat的逐字记录:

        char *strcat(char *dest, const char *src);

        描述

        strcat() 函数将 src 字符串附加到 dest 字符串,覆盖 dest 末尾的空字节('\0'),然后添加一个终止空字节。字符串不能重叠,dest字符串必须有足够的 结果的空间。

        作为程序员,您需要确保指针char * dest 引用了足够的有效内存来保存将从char* src 指向的位置复制的附加chars。

        要成功地为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);
        

        【讨论】:

          猜你喜欢
          • 2021-04-01
          • 2016-03-29
          • 2020-02-14
          • 1970-01-01
          • 1970-01-01
          • 2018-04-23
          • 1970-01-01
          • 1970-01-01
          • 2018-12-13
          相关资源
          最近更新 更多