#include <stdio.h>
#define LEN 100
void Copy(char a[], char b[], int n, int m);
int main(void)
{
	char a[LEN], b[LEN];
	int n, m;
	scanf("%d", &n);
	getchar();
	fgets(a, n + 1, stdin); //n+1就是读取输入的n个字符,后接一个'\0'
	scanf("%d", &m);
	Copy(a, b, n, m);
	printf("%s\n", b);
	return 0;
}
void Copy(char a[], char b[], int n, int m)
{
	int i, j = 0;
	for (i = m - 1; i <= n; i++)  //i<=n  因为也要把结束符给拷贝进去
		b[j++] = a[i];
}


点赞(90)
 

0.0分

9 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 11 条评论

向志权 10月前 回复TA
#include<stdio.h>
#include<math.h>
void a(int n,char x[],char k[],int m)
{
	int i,j=0;
	for(i=m-1;i<n;i++)
	{
		k[j++]=x[i];	
	}
}
void a(int n,char x[],char k[],int m);
int main(void)
{
	int n,i;
	char x[100];
	char k[100];
	int m;
	scanf("%d",&n);
	scanf("%s",&x);
	scanf("%d",&m);
	a(n,x,k,m);
	for(i=0;i<=m;i++)
	{
		printf("%c",k[i]);
	}
	printf("\n");
	return 0;
}
求求了,这哪里错了
wh 1年前 回复TA
@虹山上峰 严重错误,数组内只能为常量,不能为变量,你可以define n但不能int n
职业摆烂人 3年前 回复TA
@虹山上峰 数组内好像要数字,不能是未知量,相当于你打完代码内存就知道了,而不是靠输入n和m才知道数组的长度
虹山上峰 3年前 回复TA
#include<stdio.h>
int main()
{
	int n,m;
	scanf("%d",&n);
	char a[n];
	gets(a);
	scanf("%d",&m);
	char b[n-m];
	for(int i=m-1,j=0;i<n;i++,j++)
	{
	    b[j]=a[i];
	}
	puts(b);
	return 0;
}
我这斯哪里错了……
末日流光 3年前 回复TA
fgets()跟gets()一样,但是优于gets()因为fets()是给了存储空间大小,这样可以防止内存溢出。fgets()遇到'\n'会停止输入,因为scanf最后会缓存一个回车,必须清除这个缓存(清除缓存可以在scanf后面加fflush(stdin);),或者用getchar()去接收这个回车,不然的话,fgets()不能输入字符
MarkandLcg 4年前 回复TA
@zyj 是的
酷酷流浪猫 5年前 回复TA
@zyj 不然空格会被当成字符串的一部分被接收到a里
酷酷流浪猫 5年前 回复TA
@zhou 文件操作里的
zyj 5年前 回复TA
那个scanf("%d",&n);
这个最后会有一个enter键
是用getchar去接受这个enter键吗
zyj 5年前 回复TA
为什么这个要用getchar()去接受这个空格字符呢