字符串输入问题

本文探讨了在C语言中不使用strcat()函数进行字符串拼接的方法,详细比较了fgets()、gets()和scanf()三种输入方式下字符串拼接的实现细节及常见错误,特别是关于回车符处理的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到字符串那一节的时候做到一个题
输入两个字符串,将第二个字符串连接到第一个之后,输出结果,不能用strcat()
我写的代码如下

#include<stdio.h>
#include<string.h>
int main()
{
	int i;
	char a[100]={0},b[100]={0},c[200]={0};
	fgets(a,100,stdin);
	fgets(b,100,stdin);//输入
	for(i=0;i<strlen(a);i++)
	{
		c[i]=a[i];
	}//把a赋入c
	for(i=strlen(a);i<strlen(a)+strlen(b);i++)
	{
		c[i]=b[i-strlen(a)];
	}//把b赋入c后面
	puts(c);
}

测试结果如下
在这里插入图片描述
然后我调试了很久发现 c[i]=b[i-strlen(a)]; 应该改成 c[i-1]=b[i-strlen(a)];
我就一直不是很懂,我就把标答写了进去

#include<stdio.h>
int main()
{
	int i=0,j=0;
	char a[100],b[100];
//	gets(a);
//	gets(b);
//	scanf("%s",a);
//	scanf("%s",b);
//	fgets(a,100,stdin);
//	fgets(b,100,stdin);       //三种输入的方法
	while(a[i]!='\0')
	{
		i++;
	}//不用strlen计算长度
	while(b[j]!='\0')
	{
		a[i]=b[j];
		i++;
		j++;
	}//在a数组后面接上去
	a[i]='\0'; 
	printf("%s",a);
}

标答是gets(),另外几个是我加上去的,测试发现,用gets()和scanf()的时候是对的,用fgets()的时候就需要把 a[i]=b[j]; 给成 a[i-1]=b[j]; 然后我写了几个小东西找到了原因,因为fgets()会把回车符也输入进去就比如说"chara a[100]"输入"abc回车"的时候你用strlen(a)的时候返回的结果会是4 它包括了a[0]=a a[1]=b a[2]=c a[3]=enter,而用gets()和scanf()就没有这种问题,而gets()使用时不知道buffer容易出错,所以fgets()可以完美的代替gets(),但是初学的时候可能也会犯和我以上的错误

还有一些大家可以把以下的源码自己改改调试调试

#include<stdio.h>
#include<string.h>
int main()
{
	char b[100];
//	fgets(b,100,stdin);

//scanf("%s",b);
	for(int i=0;i<4;i++)
	{
	scanf("%c",&b[i]);	
	}

//	printf("%d\n",strlen(b));
	
	
	for(int i=0;i<4;i++)
	{
	printf("%c\n",b[i]);	
	}
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值