You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改原字符串的情况下实现字符串拼接?

问题:基于原字符串拼接不同内容且不修改原字符串

你当前的代码中,strcat会直接修改str1的内容,第一次拼接后str1已经变成了"begin:str2",第二次拼接自然会在这个基础上追加str3,导致输出不符合预期。要实现始终以原始字符串为基础拼接不同后缀,可以用以下两种方法:

方法一:使用原始字符串副本 + 临时缓冲区

先保存原字符串的副本,每次拼接前将副本复制到临时数组,再在临时数组上操作,避免修改原字符串:

#include<stdio.h>
#include <string.h>
int main(void)
{
    char str1[100] = "begin";
    char str2[100] = "str2";
    char str3[100] = "str3";
    
    // 保存原始字符串的副本
    char str1_original[100];
    strcpy(str1_original, str1);

    // 第一次拼接输出
    char temp[100];
    strcpy(temp, str1_original);
    strcat(temp, ":");
    strcat(temp, str2);
    puts(temp);

    // 第二次拼接输出(重新从原始字符串开始)
    strcpy(temp, str1_original);
    strcat(temp, ":");
    strcat(temp, str3);
    puts(temp);

    return 0;
}

方法二:直接用格式化输出(更简洁)

如果只是为了输出拼接后的字符串,不需要保存拼接结果,可以直接用printf的格式化功能完成组合,完全不需要修改原字符串:

#include<stdio.h>
#include <string.h>
int main(void)
{
    char str1[100] = "begin";
    char str2[100] = "str2";
    char str3[100] = "str3";

    printf("%s:%s\n", str1, str2);
    printf("%s:%s\n", str1, str3);

    return 0;
}

两种方法都能得到期望的输出:

begin:str2
begin:str3

内容的提问来源于stack exchange,提问作者July

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:43:10