C语言的字符串拼接

不用strcat函数,自己拼接字符串:

参考:https://zhuanlan.zhihu.com/p/346126120

#include<stdio.h>
int main(void)
{
	char str1[100]="abc";
	char str2[100]="hijk";
	int i=0,j=0;
	while(str1[i]!='\0')//计算字符串1长度 
	{ 
		i++;
	}
	while(str2[j]!='\0')//把字符串2赋值到字符串1的后面 
	{ 
		//此时的i是字符串1的长度,作为下标正好是最后一个字符的下一个。 
		//此时的j是字符串2的开始,下标为0。相当于把字符串2添加到字符串1的末尾。然后自增,继续赋值下一个。 
		str1[i++]=str2[j++];
	}
	str1[i]='\0';//字符串1已经被重写了,末尾要添加结束字符。 
	puts(str1);
	return 0;
}

不改变基础字符串 不断拼接新的字符串

用strcat函数会改变被添加的那个变量,有时候我需要在循环里组合字符串,前面的字符串是不允许变的,只能自己写一个了。

方案一:

#include<stdio.h>
#include <string.h>
int main(void)
{
    char str1[100]="begin:";
    char str2[100]="str2";
    char str3[100]="str3";
    char str1_copy[100];
    
    strcpy(str1_copy, str1);  // First assembly
    strcat(str1_copy,str2);
    puts(str1_copy);
    
    strcpy(str1_copy, str1);  // New assembly
    strcat(str1_copy,str3);
    puts(str1_copy);
}

方案2:

#include<stdio.h>
#include <string.h>
int main(void)
{
	char str1[100]="begin:";
    char str2[100]="str2";
    char str3[100]="str3";
    char str1_copy[100];
    
 	size_t str1_len = strlen(str1);  // Remember the original size of str1
    strcat(str1,str2);
    puts(str1);

    str1[str1_len] = 0;  // Reset str1 before next assembly
	strcat(str1,str3);
    puts(str1);
}

更简洁的方案: 用strcpy复制来替代追加

#include<stdio.h>
#include <string.h>
int main(void)
{
	char str1[100]="begin:";
    char str2[100]="str2";
    char str3[100]="str3";
    
 	size_t str1_len = strlen(str1); 
    strcpy(str1+str1_len,str2);
    puts(str1);
    strcpy(str1+str1_len,str3);
    puts(str1);
}

参考:

https://stackoverflow.com/questions/76858716/how-to-string-assembly-without-changing-the-original-string

https://wangdoc.com/clang/string#strcpy

posted @   C羽言  阅读(698)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示