memcpy strcpy strncpy的使用

strcpy和memcpy都是标准C库函数,它们有下面特点:

1、strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容外,还会复制字符串的结束符。

strcpy的函数原型是:char* strcpy(char* dest, const char* src);

注意几点:

(1)、操作的数据类型是char*,返回的也是char *

(2)、该函数会连同字符串的结束字符‘/0‘一起拷贝到字符数组中,故字符数组的长度应该至少是字符串的长度加1

(3)、dest是存放目标字符串的首地址;如果想从第3个字符开始存放 dest+3

(4)、该函数会拷贝字符串的内容直至遇到第一个字符值为0的字符(第一个字符值为0的字符也会被拷贝),故如果一个字符串或字符数组含有大量的值为0的数据,则不宜用该函数进行拷贝操作,可用memcpy函数

2、memcpy只提供一般的内存复制,即memcpy对于需要复制的内容没有限制,因此用途更广。

memcpy的函数原型是:void *memcpy(void *dest,  const char* src,  size_t count);

注意几点:

(1)、需要指定复制的长度 size_t count,memcpy用参数size_t决定复制多少个字符(strcpy遇到结束符"\0"结束)

strcpy 和 memcpy主要有以下三方面的区别:

1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符串、整型、结构体、类等。

2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符串的结束符"\0”才结束,所以容易溢出。memcpy则是根据第3个参数决定复制的长度。

3、用途不同。通常在复制字符串时用strcpy,而需要复制其它类型的数据是用memcpy。

3、strncpy

char *strncpy(char *dst, const char *src, size_t count)

该函数用于拷贝count个字符。

注意:

(1)、 count一定要小于dst的大小。

(2)、调用完该函数后一定要加上一句:dst[count] = ‘/0‘;否则不安全,如strlen等函数要求参数必须是以‘/0‘结尾的字符串。

因为当count小于src的大小时,src的结束字符‘/0‘并不会被拷贝,故应该为dst加上一个结束符。

时间: 2024-08-24 16:49:58

memcpy strcpy strncpy的使用的相关文章

笔试算法题(04):实现 string & memcpy & strcpy & strlen

出题:请实现给定String的类定义: 分析:注意检查标准类构造注意事项: 解题: 1 #include <stdio.h> 2 #include <string.h> 3 /** 4 * 检查是否需要构造函数 5 * 检查是否需要无参构造函数 6 * 检查是否需要成员变量(函数)私有 7 * 检查是否需要在构造函数预初始化成员变量 8 * 检查是否需要析构函数 9 * 检查是否需要虚拟析构函数 10 * 检查是否需要复制构造函数(参数为const) 11 * 检查是否需要赋值重载

strcpy,strncpy,strcmp函数

void mystrcpy(char *dst,const char * src)//当dst的内存长度不够时将会产生溢出 { if (dst==NULL||src==NULL) { exit(0); } while(*src!='\0') *dst++=*src++; *dst='\0'; } int main() { char src[]="hello world"; char dst[]="zzzzzz"; strcpy(dst,src);//错误 发生越界

C语言——常用标准输入输出函数 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字符串拷贝函数 strcpy(), strncpy(), strchr(), strstr()函数用法特点

1 首先介绍几个常用到的转义符 (1)     换行符"\n", ASCII值为10: (2)     回车符"\r", ASCII值为13: (3)     水平制表符"\t", ASCII值为 9: (4)     空字符"\0" ,ASCII值为0: (5)     空:NULL (即为0): (6)     空格键space, ASCII值为32: 2 常用输入输出函数 scanf() , 从缓冲区读入数据,以空格,制

【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)

strcpy 拷贝源字符串到子字符串,包括'\0'. 代码实现: char* strcpy(char* dst,const char* src) {     assert(src);     char* ret = dst;     while (*src)     {         *dst = *src;         src++;         dst++;     }     *dst = '\0';     return ret; } 2.strncpy: strncpy与str

C++ 中 strcpy、strcpy_s、strncpy、strlcpy的异同

strncpy的用法:它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0'). 函数原型:char * strncpy(char *dst,const char * src, int n) 当src的长度小于n时,dst内的未复制空间用'\0'填充.否则,复制n个字符到dst,没有加'\0'.这里就要注意在字符串dst结尾处理加'\0'的情况了 strcpy ,strncpy ,strlcpy的用法好多人已经知道利用strncpy替代strcpy来防止缓冲区越界.

查看文章strncpy()功能更好的文章

strncpy()函数 原型:extern char *strncpy(char *dest, char *src, int n); 使用方法:#include <string.h> 功能:把src所指由NULL结束的字符串的前n个字节拷贝到dest所指的数组中. 说明:假设src的前n个字节不含NULL字符,则结果不会以NULL字符结束. 假设src的长度小于n个字节,则以NULL填充dest直到复制完n个字节. src和dest所指内存区域不能够重叠且dest必须有足够的空间来容纳src的

memcpy函数详解

函数原型: void *memcpy(void *dest,void *src, unsigned int count) { assert((dest!=NULL)&&(src!=NULL)); if(dest==src) return src; char* d=(char*)dest; char* s=(char*)src; while(count--> 0) *d++=*s++; return dest; } 这是一个memcpy的源代码,在函数里面生成临时指针,这样不会改变原始

memcpy函数用法

memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h> 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针. 举例: //

memcpy函数 和 memmove函数 原码

原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h> 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针. 举例: // memcpy.c #include <syslib.h> #include <string.h> main() { char *s=&