如何在不修改原字符串的情况下实现字符串拼接?
问题:基于原字符串拼接不同内容且不修改原字符串
你当前的代码中,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
相关产品推荐
相关产品推荐

