memcpy函数、strcpy函数、strncpy函数

一、函数说明

1、memcpy函数

void  *memcpy(void *s1,  const void *s2,  size_t  n);

说明:

函数memcpy从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。

返回值:

函数memcpy返回s1的值。

2、strcpy函数

char  *strcpy(char *s2, const char *s1);

说明:

函数strcpy把s1指向的串(包括空字符)复制到s2指向的数组中。如果复制发生在两个重叠的对象中,则这种行为未定义。

返回值:

函数strcpy返回s2的值。

3、strncpy函数

char  *strncpy(char *s2, const char *s1, size_t n);

说明:

函数strncpy从s1指向的数组中最多复制n个字符(不复制空字符后面的字符)到s2指向的数组中。如果复制发生在两个重叠的对象中,则这种行为未定义。

如果s1指向的数组是一个比n短的字符串,则在s2定义的数组后面补空字符,直到写入了n个字符。

返回值:

函数strncpy返回s2的值。

4、memset()函数

extern void *memset(void *buffer, int c, int count)

说明:

Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’如:原型是memset(buffer, 0, sizeof(buffer))。

buffer:为指针或是数组, c:是赋给buffer的值,count:是buffer的长度.

二、注意事项

strcpy 是依据 “\0” 作为结束判断的,如果 s2 的空间不够,则会引起 buffer overflow。

memcpy用来在内存中复制数据,由于字符串是以“\0”结尾的,所以对于在数据中包含“\0”的数据只能用memcpy,如:"hell\0oworld"。

Strncpy和memcpy很相似,只不过它在一个终止的空字符处停止。当n>strlen(s1)时,给s2不够数的空间里填充“\0”;当n<=strlen(s1)时,s2是没有结束符“\0”的。

这里隐藏了一个事实,就是s2指向的内存一定会被写n个字符。

所以总的来说注意:

1、s2指向的空间要足够拷贝;使用strcpy时,s2指向的空间要大于等于s1指向的空间;使用strncpy或memcpy时,s2指向的空间要大于或等于n。

2、使用strncpy或memcpy时,n应该大于strlen(s1),或者说最好n >= strlen(s1)+1;这个1 就是最后的“\0”。

3、使用strncpy时,确保s2的最后一个字符是“\0”。

三、总结

1、memset主要应用是初始化某个内存空间。

2、memcpy是用于copy源空间的数据到目的空间中。

3、strcpy用于字符串copy,遇到‘/0’,将结束。

原文地址:https://www.cnblogs.com/studysoftware/p/10856908.html

时间: 2024-10-11 02:11:57

memcpy函数、strcpy函数、strncpy函数的相关文章

字符串函数---strcpy()与strncpy()详解及实现

一.strcpy()与strncpy() strcpy():strcpy(dest,src);    strcpy把src所指向以'\0'结尾的字符串复制到dest所指的数组中,返回指向dest的指针. 当sizeof(dest)>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0'; 当sizeof(dest)<sizeof(src)时,拷贝出错. strncpy():strncpy(dest,src,n);    strncpy把src所指向以'\0'结尾的字符串的前n

字符串处理函数strcpy()与strncpy()的区别

1.strcpy()将整个字符串复制到指定的缓冲区中,原型为:strcpy(str1,str2);其中str1为源数组,str2为目标数组. strncpy()将指定数目的字符从一个字符串复制到另一个字符串中,原型为:strncpy(str1,str2,number);用于将指定数目的字符复制到目标缓冲区中.

strcpy,strncpy, strlen, strcmp strcat函数实现

#include <stdio.h> #include <assert.h> char* strcpy(char* strDest, const char* strSrc) { assert((strDest != NULL) && (strSrc != NULL)); char* address = strDest; while((*strDest++ = *strSrc++) != '\0') NULL; return address; } char* strn

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() , 从缓冲区读入数据,以空格,制

memcpy,memmove,memset函数福彩3D平台搭建用法及实现

一.函数介绍:福彩3D平台搭建论坛:haozbbs.com Q14465950671.memcpy函数原型:extern void memcpy(void dest, const void *src, size_t count);用法:#include<string.h>功能:由src所指内存区域复制count个字节到dest所指内存区域.说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针.注意:和strcpy相比,memcpy不是遇到'/0'就结束,而是一定会拷贝完n个字

C函数篇(strncpy函数)

strncpy 是 C语言的函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *destin, char *source, int maxlen),把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中 格式: 头文件:#include<string.h> char*strncpy(char*dest,char*src,size_tn); 功能: (c/c++) 复制字符串src中的内容(字符,数字.汉字....)到字符串dest中

编写实现字符串拷贝函数strcpy()完整版

有个题目编程实现字符串拷贝函数strcpy(),很多人往往很快就写出下面这个代码. void strcpy( char *strDest,char *strSrc ) { while(( *strDest++ = * strSrc++) != '\0' );//逐个赋值字符串数组中的数据,知道字符串结束 } 其实仔细看看这个实现过程并不完美,严格来说非常不严谨,我们可以完善一下. char * strcpy( char *strDest, const char *strSrc )//将源字符串加

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所指内存区域不可以重叠

转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 作者:jcsu C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. 字符串比较 - strcmp7. 计算字符串中的元音字符个数8. 判断一个字符串是否是回文1. 写一个函数实现字符串反转 版本1 - while版 void strRev(char *s){