实现strcpy(C中字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现)

本文目录
- C中字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- 编写函数strcpy,实现把字符串s1复制到s2.
- 用户定义版字符串拷贝函数my_strcpy( )实现strcpy的功能即主函数中定义两个字符数组a,b键盘输入字符
- c++中strcpy()函数是如何实现的为什么两个参数都是地址,但是直接用赋值运算符就不行
- C语言:用指针实现库函数strcpy
- strcpy_s的用法
- 使用strcpy(b,a)实现字符串的复制、strcat(a,b)实现字符串的连接,并分别显示两个字符串
C中字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
strcpy()函数只能拷贝字符串。strcpy()函数将源字符串的每个字节拷贝到目录字符串中,当遇到字符串末尾的null字符(\0)时,它会删去该字符,并结束拷贝。
memcpy()函数可以拷贝任意类型的数据。因为并不是所有的数据都以null字符结束,所以你要为memcpy()函数指定要拷贝的字节数。
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
在拷贝字符串时,通常都使用strcpy()函数;在拷贝其它数据(例如结构)时,通常都使用memcpy()函数。上代码你看看:
#include 《stdio. h》
#include 《string. h》
typedef struct cust-str {
int id ;
char last_name ;
char first_name;
} CUSTREC;
void main (void);
void main (void)
{
char * src_string = "This is the source string" ;
char dest_string;
CUSTREC src_cust;
CUSTREC dest_cust;
printf("Hello! I’m going to copy src_string into dest_string!\n");
printf("Done! dest_string is: %s\n" ,
strcpy(dest_string, src_string)) ;
printf("Encore! Let’s copy one CUSTREC to another. \n") ;
prinft("I’ll copy src_cust into dest_cust. \n");
src_cust. id = 1 ;
strcpy(src_cust. last_name, "Strahan");
strcpy(src_cust. first_name, "Troy");
memcpy(&dest_cust, &src_cust, sizeof(CUSTREC));
printf("Done! I just copied customer number # %d (%s %s). " ,
dest_cust. id, dest_cust. first_name, dest_cust. last_name) ;
}
编写函数strcpy,实现把字符串s1复制到s2.
需要哪种语言的?
/**********************
* C语言标准库函数strcpy的一种典型的工业级的最简实现
* 返回值: 返回目标串的地址。
* 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
* 参数:
* strDestination 目标串
* strSource 源串
***********************/
char *strcpy(char *strDestination,const char *strSource)
{
assert(strDestination!=NULL && strSource!=NULL);
char *strD=strDestination;
while ((*strDestination++=*strSource++)!=’\0’);
return strD;
}
用户定义版字符串拷贝函数my_strcpy( )实现strcpy的功能即主函数中定义两个字符数组a,b键盘输入字符
//之前没留意你的返回值为空的要求
void my_strcpy(char* dest , const char *src)
{
//调试时,使用断言,入口检测
assert( (dest!=NULL) && (src!=NULL) );
//注意这里的内存指向参数dest所在的内存,不是栈内存,因而可以在函数中返回
char *to = dest;
//主要操作在while条件中完成
int i = 0;
while( (*dest++ = *src++)!=’\0’)
{
i++;
NULL;
}
dest = dest - i;
}
/*
* 参数:dest目标地址,src源地址
* 返回:返回拷贝好的地址;如果出错或者有重叠,无定义
* 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。
*/
char *strcpy_v1(char *dest , const char *src)
{
//调试时,使用断言,入口检测
assert( (dest!=NULL) && (src!=NULL) );
//注意这里的内存指向参数dest所在的内存,不是栈内存,因而可以在函数中返回
char *to = dest;
//主要操作在while条件中完成
while( (*dest++ = *src++)!=’\0’)
{
NULL;
}
//返回拷贝字符串首地址,方便连缀,比如strlen(strcpy(dest,"hello"))
return to;
}
c++中strcpy()函数是如何实现的为什么两个参数都是地址,但是直接用赋值运算符就不行
//strcpy的实现
char *ME_strcpy(char *dest, const char *src)
{
char *p = dest;
while(*src)
{
*p++ = *src++;
}
*p = *src;
return dest;
}
字符串的存储格式是以一个头指针开始,然后跟着N个字符。
当用赋值运算的时候实际上只能把指针地址进行赋值。
C语言:用指针实现库函数strcpy
刚刚搬完砖,来看看你这道题。一看之下,一堆吐槽啊!
首先强烈批评!为啥要把个经典的strcpy的参数顺序要搞颠倒了?看的忒不爽!
然后你这是在求教呢还是考广大网友呢?如果说有错,你怎么不把错误现象贴出来?
以我看,你这程序估计是没跑死,可能是出乱码了?
没跑死的都不是问题,你就这样安慰自己吧。
顺便说一句,那个while循环有点问题,会导致出现你不希望看到的情况,自己检查一下那个判断的边界条件。
为了让你清晰看到那个错误,不多改,在while循环后边加一句吧:
*str1 = ’\0’;
还有,那个printf显然是会输出乱码的。加点儿悬赏分再问吧,码农都不容易……
strcpy_s的用法
strcpy,即string copy(字符串复制)的缩写。strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。
返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。
返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回,类型不符,编译报错。
扩展资料
将问题通过功能分解,各个击破的编程方法(过程化编程) 是一种以行为抽象为主的抽象编程将问题通过实体分析,分层分类地实现抽象数据类型,从而进行简单应用编程(基于对象编程)是一种以数据抽象为主的抽象编程
这种抽象编程,通过数据类型复用,方便编程,方便维护和扩展,其效果比过程化编程更好编程语言中没有许多具体的数据类型要解决实际问题,很大部分工作是要建立数据模式与实际问题的对应,也就是建立抽象数据类型的过程对象化编程就是基于分层分类的抽象数据类型之具体编程。
参考资料来源:百度百科-strcpy
使用strcpy(b,a)实现字符串的复制、strcat(a,b)实现字符串的连接,并分别显示两个字符串
代码如下:
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
int main()
{
char a = "World!";
strcpy(b, a);
printf("%s\n", b);
strcat(a, b);
printf("%s\n", a);
system("pause");
return 0;
}
运行结果:

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40








