一个10分的C库中的strcpy()函数及其剖析

#include <iostream>
#include <assert.h>

using namespace std;

char* Mystrcpy(char* dest, const char* src)//src加const保护
{
	assert((dest != NULL) && (src != NULL));//assert断言,保证dest,src不为空
	char* address = dest;                 //记录dest的起始位置作为返回值
	while ((*dest++=*src++)!='\0')        //把src中的字符一个一个的复制给dest(包括src中的'\0'),当*src==‘\0’时,停止;
	{
		;
	}
	return address;                       //返回char*的指针
}
int main()
{
	
	char s2[20];
	cout << "ret=" << Mystrcpy(s2, "abcdefghi") << endl;
	return 0;
}
//测试题1
void test1()
{
	char string[10];
	char* str1 = "0123456789";
	strcpy(string, str1);//错误:strcpy函数的实现,把源字符串中的'\0'也会拷贝到目标字符串中,但是string字符串中只有10个字符大小的空间,而*str1的大小为11,所以会越界。
}

//测试题2

void test2()
{
	char string[10], str1[10];
	int i;
	for (i = 0; i < 10; i++)
	{
		str1[i] = 'a';
	}                  //for循环将str1中的10个字符空间全部赋值为'a'
	strcpy(string, str1);//由于str1中没有'\0',所以复制字符的个数不确定,也存在越界为题
}

//测试题3
void test3(char* str1)
{
	char string[10];
	if (strlen(str1) <= 10)//strlen计算字符串长度不包括'\0',所以应该 if(strlen(str1) < 10)
	{
		strcpy(string, str1);
	}
}

下半部分是关于strcpy()函数的纠错题,主要是在:

1.strcpy()函数拷贝会将'\0'也拷贝到目标字符串中,

2.strcpy()函数拷贝时碰到源字符串中的第一个'\0'后,结束拷贝

3.strlen()函数计算字符串长度时,不包括'\0'


只要了解了strcpy()函数的实现原理和使用注意事项就可以很好的使用strcpy()函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值