C语言::模拟实现strcpy函数 - 高小调博客

C语言::模拟实现strcpy函数

题目要求

编写一个C语言程序模拟实现strcpy函数.

(我们依然先模拟实现strcpy函数,然后再对照string.h库中strcpy函数的实现,对比与大师之间的差距.)

函数分析

strcpy原型:char *strcpy(char *dest,const char *src);

strcpy功能:把从src地址开始且含有\0结束符的字符串复制到以dest开始的地址空间.

strcpy返回值:最终返回dest

更多strcpy函数信息详见:C语言::strcpy函数功能、原型、用法及实例

我们了解strcpy函数大体信息之后,不难分析出模拟实现strcpy函数的算法.

算法分析

算法依然很简单:循环把src所指向的内容赋值给dest,然后src++,dest++直到遇到\0结束.

模拟实现核心代码

//模拟实现strcpy函数
char *my_strcpy(char *dest,const char *src){
	char *ret = dest;
	assert(dest);
	assert(src);
	while(*dest++=*src++){
		;
	}
	return ret;
}

string.h库实现核心代码

//string.h库实现strcpy核心代码
char * __cdecl strcpy(char * dst, const char * src){
     char * cp = dst;
     while( *cp++ = *src++ );
     return(dst);
}

完整测试代码

/*
*本代码由高小调原创,版权归高小调博客所有 
*作者:高小调
*日期:2016-8-14
*代码功能:模拟实现strcpy函数
*集成开发环境:Microsoft Visual Studio 2010 
*/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//模拟实现strcpy函数
char *my_strcpy(char *dest,const char *src){
	char *ret = dest;
	assert(dest);
	assert(src);
	while(*dest++=*src++){
		;
	}
	return ret;
}
int main(){
    //昨天打LOL的时候,遇到三个小学生
    char Pupil1[]="ADC和打野都是傻逼!";//中单说
    char Pupil2[]="反弹!";             //ADC说
    char Pupil3[10]={0};               //打野正在打蓝Buff...没空喷中单
    //打野打完蓝Buff后,复制了一下ADC的话
	my_strcpy(Pupil3,Pupil2);
    printf("中单说:%s\n",Pupil1);
    printf("ADC说:%s\n",Pupil2);
    printf("打野正在打蓝BUFF...\n");
    printf("打野打完蓝BUFF后,复制了一下ADC的话\n");
    printf("打野说:%s\n",Pupil3);
    system("pause");
    return 0;
}

输出

模拟实现strcpy函数输出结果

    函数列表
  1. printf()函数功能、原型、用法和实例
  2. assert()宏功能、原型、用法和实例
  3. strcpy()函数功能、原型、用法及实例

小调祝你一切安好.

本文由高小调博客原创!

原文地址:http://gaoxiaodiao.com/p/27.html

如欲转载,请注明出处!

PS:果然不能边听音乐边写博客,给数组Pupil3定义时忘给长度了...

就说运行时总弹出栈溢出,调试了半天看到Pupil3只有1个长度,我还以为是strcpy函数问题.

于是还艾特了下老师...

阿西吧!!!

(未完待续...)

上一篇:
下一篇: