memcpy()函数
函数原型
void *memcpy(void *dest,const void *src,size_t n);
功能
由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。
头文件
#include <string.h>
说明
- src和dest所指内存区域不能重叠,函数返回指向dest的指针。
- 与strcpy相比,memcpy并不是遇到’\0’就结束,而是一定会拷贝完n个字节。
- 如果目标数组dest本身已经有数据了,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址追加到你要追加数据的地址。
注意:src和dest都不一定是数组,任意的可读写的空间均可。
strcpy()函数
原型
char *strcpy(char *dest,const char src);
功能
strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值为char。
头文件
#include <string.h>
#include <stdio.h>
说明
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
注意:sizeof(指针),sizeof(数组)的区别。
strncpy()函数
函数原型
char *strncpy(char *desc,const char *src,size_t n);
功能
函数strncpy从src指向地址为起始地址的空间中复制n个字符(不复制空字符后面的字符)到以desc指向的地址为起始地址的空间中。如果未抵达n而src结束,则写入额外的空字符到dest,直至写入总共count个字符。
函数strncpy_s
strncpy_s(char *restrict dest,rsize_t destlen,const char *restrict src,rsize_t count);
注意事项
- strcpy是依据’\0’作为结束判断的,如果dest的空间不够,则会引起buffer overflow。
- memcpy用来在内存中复制数据,由于字符串是以’\0’结尾的,所以对于在数据中包含’\0’的数据只能用memcpy。
- strncpy和memcpy很相似,只不过他在一个终止的空字符处停止。当n>strlen(src)时,给dest不够数的空间里填充终止字符,但也不是’\0’,是’?’(在visual studio中);当n<=strlen(src)时,dest是没有结束符’\0’的(经过测试,无论复制多少个当n<dest的空间长度时都会自动分配’\0’,当等于时没有’\0’,大于时报错;而memcpy基本一样,不过memcpy当n大于dest的长度时不会报错,在visual studio中有绿线警告提示)。