看到字符串那一节的时候做到一个题
输入两个字符串,将第二个字符串连接到第一个之后,输出结果,不能用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]);
}
}