strcpy和strncpy区别 memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy, memmove
strcpy和strncpy区别(2009-04-27 15:48:52) 转载标签:杂谈 分类:C++/C 第一种情况: char* p="how are you ?"; char name[20]="ABCDEFGHIJKLMNOPQRS";
strcpy(name,p); //name改变为"how are you ?\0OPQRS " ====>错误! strncpy(name,p,sizeof(name)) //name改变为"how are you ? " ====>正确!
第二种情况: char* p="how are you ?"; char name[20];
strcpy(name,p); //name改变为"how are you ?\0未知字符 " ====>错误! name[sizeof(name)-1]='"0' //和上一步组合,得到正确的结果! strncpy(name,p,sizeof(name)); //name改变为"how are you ? " ====>正确!
第三种情况: char* p="how are you ?"; char name[10];
strcpy(name,p); //name改变为"how are yo" ====>无结束符'\0',错误! name[sizeof(name)-1]='"0' //和上一步组合,弥补结果。但要注意,字符传递错误! strncpy(name,p,sizeof(name)); //和单纯的一步strcpy结果一样!
总结:strcpy 如果源长>目标长,则将源长中等于目标长的字符拷贝到目标字符串 如果源长<目标长,则源长全部拷贝到目标字符串,不包括'\0' strncpy 如果目标长>指定长>源长,则将源长全部拷贝到目标长,自动加上'\0'
如果指定长<源长,则将源长中按指定长度拷贝到目标字符串,不包括'\0'
如果指定长>目标长,error happen!
memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy, memmove
memcpy 原型 extern void *memcpy(void *dest, void *src, unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 出错可能: 1,dest buffer 不够大,不能容纳src的内容。 2,count 大于 src buffer长度, 造成拷贝越界到别的内容。 3,dest 和 src 有内存重叠。 例如,array[] = {0,1,2,3,4}
memcpy(&array[2], &array[0], 3);
strcpy 原型:extern char *strcpy(char *dest,char *src); 功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且,dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。 出错可能: 1,src 和 dest有重叠 2,dest空间不足以来容纳src的字符串
3,用之前为初始化数组 char* p="I love pizza!"; char name[20]="ABCDEFGHIJKLMNOPQRS"; strcpy(name,p); //name变为"I love pizza! OPQRS " 错! 4,字符串中有中文字符,中文字符占两个字节。 char* p = "ABCDEFGHIJKLMNOPQR啊"; strcpy(name, p);
strncpy 原型:extern char *strncpy(char *dest, char *src, int n); 功能:把src所指由'\0'结束的字符串的前n个字节复制到dest所指的数组中。 说明: 如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。 如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。 src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 出错可能: 1,src 和 dest 重叠 2,dest 不足以容纳 src的字符串 3,安全性高于strcpy,但是当dest长度大于src长度,两者出同样的错误。字符串截断,没有\0.
lstrcpy lstrncpy 原型: LPTSTR lstrcpy(LPTSTR dest, LPTSTR src); LPTSTR lstrcpy(LPTSTR dest, LPTSTR src, int count); 功能:类似于strcpy 和strncpy 说明:这是windows API,只能用于windows平台。和标准C函数strcpy,strncpy区别在于,如果定义了unicode,lstrcpy() 就变成 wstrcpy()完成double-byte unicode字符的拷贝。
wstrcpy 原型:wchar_t *wstrcpy (wchar_t *ws1,wchar_t *ws2 ); wchar_t *wstrncpy(wchar_t *ws1,wchar_t *ws2,int n ); 功能:类似于strcpy 和strncpy,但是作用于宽字符, 说明:所在头文件是<wstring.h>,而不是<string.h> 出错可能: 原理类似窄符拷贝
memmove 原型:extern void *memmove(void *dest, const void *src, unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向dest的指针。由此可见,用memmove 比memcpy安全的多!
strcpy和strncpy区别 memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy, memmove相关推荐
- memcpy, strcpy, strncpy的区别和用法
注意事项 strcpy 是依据 "\0" 作为结束判断的,如果 s2 的空间不够,则会引起 buffer overflow. memcpy用来在内存中复制数据,由于字符串是以&qu ...
- strcpy、strncpy与memcpy的区别与使用方法
2018-3-19 一.函数说明 1.memcpy函数 void *memcpy(void *s1, const void *s2, size_t n); 说明: 函数memcpy从s2指向的对象中复 ...
- memset,memcpy,strcpy 的区别
一.函数原型 strcpy extern char *strcpy(char *dest,char *src); #include <string.h> 功能:把src所指由NULL结束的 ...
- 【C语言】字符串库函数的解读和模拟实现第一弹(strlen、strcpy、strcat、strcmp、strncpy、strncat 及 strncmp)
目录 一. strlen函数 1.1 strlen函数实现的功能及函数原型 1.1.1 strlen函数实现的功能 1.1.2 strlen的函数原型 1.1.3 strlen实现功能的更进一步解读 ...
- strncpy 和 memcpy
strncpy 和 memcpy Tags:学习笔记 strncpy 函数原型:extern char *strncpy(char *dest, char *src, int n) 参数说明:dest ...
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove ================================ 1 strstr 字符 ...
- 字符串拷贝函数memcpy()、strncpy()和snprintf()性能之比较
问题: 函数memcpy(dest, src, sizeof(dest)).strncpy(dest, src, sizeof(dest))和snprintf(dest, sizeof(dest), ...
- c语言strdup,C语言中的strdup()函数和其与strcpy()函数的区别
头文件: #include 定义函数: char * strdup(const char *s); 函数说明:strdup()会先用maolloc()配置与参数s 字符串相同的空间大小,然后将参数s ...
- strdup与strcpy具体的区别
我分别在XP的环境和linux环境下编译运行C代码,我发现一个不解的现象: 现象描述: 两个字符串 char* from, char* to;要把from的内容复制给to. 我在XP下,用strcpy ...
最新文章
- 作为AI产品经理,我们到底在优化什么?
- linux环境变量恢复,linux环境变量设置错误后的恢复方法(转)
- [Android] TableLayout
- Java 10及更高版本的思考
- TigerGraph持续产品创新,发布最新的“全民图”版本
- android html 启动app,Android js交互 与 Html启动App
- 区块链学习笔记:DAY05 如何使用公有云区块链服务
- Operators一句话介绍(RxJava版)
- AndroidStudio_安卓原生开发_自定义单选列表Spinner绑定自定义数据类型---Android原生开发工作笔记143
- 2003-can't connect to MYSQL server on 'localhost'(10038)
- oracle 常用索引分析,使用原则和注意事项
- PHP面试题及答案(一)
- 蚂蚁上市,身边又多了一堆千万富翁!
- 微课计算机教学研究案例,《微课在中学信息技术教学中有效运用的案例研究》的开题报告...
- Word另存为pdf时提示“由于出现意外错误,导出失败”的解决方案
- 如何使用多种方法在 Mac 上截屏?
- execute和submit的区别
- GM7150,振芯科技,视频解码器,CVBS转BT656/601,QFN32,替换TVP5150/CJC5150
- Excel怎么将表格中的所有空白行删除
- Java高频重点面试题,看这一篇就够了。
热门文章
- SpringMVC学习01之回顾Servlet
- 手机搭载云服务器_华为云发布“鲲鹏云手机”:原生安卓系统、鲲鹏920加持
- react ui框架 移动端_你必须要知道的移动端UI组件设计宝典
- win10服务器文件停止,解决win10提示“当OLE服务于对象服务器通讯时,后者已停止”的方法...
- JAVA 判断其是否为合法标识符
- 初学Java Web(2)——搭建Java Web开发环境
- JavaScript中数组使用总结
- Spark机器学习库(MLlib)指南
- OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测
- 您能看出这个Double Check里的问题吗?(解答)