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相关推荐

  1. memcpy, strcpy, strncpy的区别和用法

    注意事项 strcpy 是依据 "\0" 作为结束判断的,如果 s2 的空间不够,则会引起 buffer overflow. memcpy用来在内存中复制数据,由于字符串是以&qu ...

  2. strcpy、strncpy与memcpy的区别与使用方法

    2018-3-19 一.函数说明 1.memcpy函数 void *memcpy(void *s1, const void *s2, size_t n); 说明: 函数memcpy从s2指向的对象中复 ...

  3. memset,memcpy,strcpy 的区别

    一.函数原型 strcpy extern char *strcpy(char *dest,char *src); #include <string.h> 功能:把src所指由NULL结束的 ...

  4. 【C语言】字符串库函数的解读和模拟实现第一弹(strlen、strcpy、strcat、strcmp、strncpy、strncat 及 strncmp)

    目录 一. strlen函数 1.1 strlen函数实现的功能及函数原型 1.1.1 strlen函数实现的功能 1.1.2 strlen的函数原型 1.1.3 strlen实现功能的更进一步解读 ...

  5. strncpy 和 memcpy

    strncpy 和 memcpy Tags:学习笔记 strncpy 函数原型:extern char *strncpy(char *dest, char *src, int n) 参数说明:dest ...

  6. 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove

    模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove ================================ 1 strstr 字符 ...

  7. 字符串拷贝函数memcpy()、strncpy()和snprintf()性能之比较

    问题: 函数memcpy(dest, src, sizeof(dest)).strncpy(dest, src, sizeof(dest))和snprintf(dest, sizeof(dest), ...

  8. c语言strdup,C语言中的strdup()函数和其与strcpy()函数的区别

    头文件: #include 定义函数: char * strdup(const char *s); 函数说明:strdup()会先用maolloc()配置与参数s 字符串相同的空间大小,然后将参数s ...

  9. strdup与strcpy具体的区别

    我分别在XP的环境和linux环境下编译运行C代码,我发现一个不解的现象: 现象描述: 两个字符串 char* from, char* to;要把from的内容复制给to. 我在XP下,用strcpy ...

最新文章

  1. 作为AI产品经理,我们到底在优化什么?
  2. linux环境变量恢复,linux环境变量设置错误后的恢复方法(转)
  3. [Android] TableLayout
  4. Java 10及更高版本的思考
  5. TigerGraph持续产品创新,发布最新的“全民图”版本
  6. android html 启动app,Android js交互 与 Html启动App
  7. 区块链学习笔记:DAY05 如何使用公有云区块链服务
  8. Operators一句话介绍(RxJava版)
  9. AndroidStudio_安卓原生开发_自定义单选列表Spinner绑定自定义数据类型---Android原生开发工作笔记143
  10. 2003-can't connect to MYSQL server on 'localhost'(10038)
  11. oracle 常用索引分析,使用原则和注意事项
  12. PHP面试题及答案(一)
  13. 蚂蚁上市,身边又多了一堆千万富翁!
  14. 微课计算机教学研究案例,《微课在中学信息技术教学中有效运用的案例研究》的开题报告...
  15. Word另存为pdf时提示“由于出现意外错误,导出失败”的解决方案
  16. 如何使用多种方法在 Mac 上截屏?
  17. execute和submit的区别
  18. GM7150,振芯科技,视频解码器,CVBS转BT656/601,QFN32,替换TVP5150/CJC5150
  19. Excel怎么将表格中的所有空白行删除
  20. Java高频重点面试题,看这一篇就够了。

热门文章

  1. SpringMVC学习01之回顾Servlet
  2. 手机搭载云服务器_华为云发布“鲲鹏云手机”:原生安卓系统、鲲鹏920加持
  3. react ui框架 移动端_你必须要知道的移动端UI组件设计宝典
  4. win10服务器文件停止,解决win10提示“当OLE服务于对象服务器通讯时,后者已停止”的方法...
  5. JAVA 判断其是否为合法标识符
  6. 初学Java Web(2)——搭建Java Web开发环境
  7. JavaScript中数组使用总结
  8. Spark机器学习库(MLlib)指南
  9. OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测
  10. 您能看出这个Double Check里的问题吗?(解答)