有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成 为另一个字符串

/*有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成
为另一个字符串*/

#include <stdio.h>
#include <string.h>
#define N 5
#define M 2

int main()
{
	int fun(char c[],char a[]); 
	char c[N];
	char a[N-M+1];
	
	printf("请输入字符串:\n");
	gets(c);
	
	printf("请输入要插入的字符串:\n");
	gets(a);
	
	fun(c,a);
	
	printf("输出结果:\n");
	puts(c);
}

int fun(char c[],char a[])
{
	char *p,*q;
	int i;
	
	p = c;
	q = a;

	for(i = 0;i < (M - 1);i++)//找到位置 
	{
		p++;
	}
	
	for(i = 0;i < strlen(a);i++)//开始复制 
	{
		*p = *q;
		p++;
		q++;
	}
}

谭浩强C程序设计(第四版)p291第7题
在编写程序的时候我发现了问题:
我定义的字符数组的长度是5,但是当我输入的字符超过5个时,输出字符数组的内容并不单单只有5个,查阅资料发现C语言并没有数组越界检查,所以会出现这种情况,因此在复制的时候使用了strlen函数。在进行输入的时候要注意避免越界,占用其他的内存可能会出现未知错误。

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值