“strcpy” 模拟的实现

我们都知道 strcpy() 函数是字符串拷贝函数,那么我们怎样来模拟实现这个函数呢?!

首先,我们要明白,strcpy() 在拷贝字符串的时候是一个一个拷贝的,直到遇到字符串结束标志 ‘\0‘ 时才停止拷贝。所以,明白了这一点,我们就可一进行简单的模拟实现了

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

char *my_strcpy(char *str1, const char *str2)
{
	assert(str1);
	assert(str2);
	while(*str1 != ‘\0‘)        //目标地址遇到‘\0‘结束
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	//while(*str2 != ‘\0‘)     //注意判断条件一定不能这样写 
	//{
	//	*str1 = *str2;
	//	str1++;
	//	str2++;
	//}
	return str1;
}
int main()
{
	char str[10];                //目标地址一定要是一个字符数组
	char *pa = "abcdef";         
	my_strcpy(str,pa);
	printf("%s\n",str);
	system("pause");
	return 0;
}

由于目标地址是没有初始化的一个字符数组,它里边存的内容我们是不知道的,并且在拷贝的过程中它会连同 *pa 中的 ‘\0‘ 一块拷贝,所以 while 条件句中的判断是 *str1 != ‘\0‘ ,如果判断错误即写为 *str2 != ‘\0‘ ,那么就会得到以下结果。

关于 my_strcpy() 函数模拟实现的几点要求:

1.拷贝时是连同字符串中的 ‘\0‘ 一块拷贝的;

2.函数实参的设定:原字符串前要加 const 保护;

3.函数的返回值类型要是 char* 类型(便于链式访问);

4.进入函数内部,要对两个指针进行断言,判断指针是否为空;

5.函数要返回一个值(地址);

6.一定要进行优化


最优化代码:

char *my_strcpy(char *str1, const char *str2)
{
	assert(str1);
	assert(str2);
	while(*str1++ = *str2++)      
	{
		;
	}
	return str1;
}

时间: 2024-08-01 22:42:44

“strcpy” 模拟的实现的相关文章

关于str家族

不受限制的字符串函数,比如说strcpy.strcmp等等,我们最常用的字符串函数都是不受限制的,只是通过寻找字符串参数结尾的NULL字节来判断它的长度.那么什么是受限制的字符串函数呢?通过下面的例子我们来一起详细了解一下 strcpy: 原型:char *strcpy( char *strDestination, const char *strSource ); 这个函数把参数src字符串复制到dest参数中,在使用这个函数时需要注意,首先,必须保证目标字符数组的空间足以容纳需要复制的字符串,

C语言中模拟实现strcpy,strstr,strcat函数

在C中,要模拟实现这几个库函数,是对指针的传参与函数的调用的考察,代码如下,仅供参考 strcpy函数: #include <assert.h> char* my_strcpy(char* dest, const char* src) { assert(dest);//断言指针的有效性 assert(src); char*pa = dest; while (*dest++ = *src++) ; return pa; } strstr函数: int my_strstr(const char*s

用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove

1.模拟实现strcpy #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> char *my_strcpy(char *dst, const char *src) { assert(dst != NULL); assert(src != NULL); char *ret = dst; while ((*dst++ = *src++) != '\0') ; re

【面试题】C语言:模拟实现strncpy,尝试比较strncpy与strcpy区别。

比较strncpy与strcpy区别: 两者均为字符串拷贝函数,用于拷贝字符串.但strcpy比较时找字符串结束标志'\0',一旦找到 '\0',比较结束.而后者我们可以根据实际情况完成指定长度n的字符串比拷贝,因此函数strcpy里面多了一个字母n,即strncpy.由此,从此处看strncpy比strcpy功能强大一点. 关于strcpy可以查看我的博客链接:http://10740184.blog.51cto.com/10730184/1714516 strncpy代码如下: #defin

模拟实现部分库函数(strcpy,strcmp,strcat,strstr,memcpy,memmove,memset)

//1.strcpy(拷贝) char* my_strcpy(char*dst, const char*src) {  assert(dst);  assert(src);  char* cp = dst;  while (*cp++ = *src++)  {   ;  }  return dst; } //2.strcat(连接) char* my_strcat(char*dst, const char*src) {  assert(dst);  assert(src);  char* cp 

模拟实现strcpy函数

a.代码简练的 1 #include<stdio.h> 2 #include<assert.h> 3 4 //模拟实现 5 void my_strcpy(char* dest, const char* src) 6 { 7 assert(dest != NULL); 8 assert(src != NULL); 9 while (*dest++ = *src++) 10 { 11 ; 12 } 13 } 14 15 16 //打印数组 17 void Print(char* arr

模拟实现strcpy

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> void my_strcpy(char*dest, const char*src) { assert(dest != NULL); assert(src); char*ret = dest; while (*dest++ = *src++) { ; } return ret; } int main() { ch

【C语言】【面试题】【笔试题】模拟实现数据库中strcpy函数

#include <stdio.h> #include <stdlib.h> #include <assert.h> char *my_strcpy(char *dest, const char *src) {     assert(dest);     assert(src);     char *ret = dest;     while (*dest++ = *src++)     {         ;     }     return ret; } int m

Alisha’s Party---hdu5437(模拟+优先队列)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5437 题意:公主有k个朋友来参加她的生日party,每个人都会带价值为v[i]的礼物过来,在所有人到齐之前公主会打开大门m次,每次开门就是在第t个人到来之后,然后让p个人进入大厅,如果当前人数不足p人,则让所有人都进去,最后在所有人都来到门口时,再次打开门,让剩下所有的人都进入大厅:当然选择礼物价值大的先进入,如果两个人的礼物价值相等,则先来的先进,现在有q个问题,问第ni个进入大厅的人是谁: 我们