建议大家多看msdn,下面的有的函数说明有的地方有错误,不管是谁写的,都不能保证没有错误,需要提醒大家,在看书的时候要保持怀疑的态度,兼容并包,要亲手试试,才能将书本的知识转化为自己的东西。

strcpy与strncpy函数

(1) Memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#include <string.h>
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。用来对一段内存空间全部设置为某个字符
例:char a[10];memset(a, '/0', sizeof(a));
memset可以方便的清空一个结构类型的变量或数组。
如:
struct _test
{
char s[10];
int x;
int y;
};
变量
struct _test   st;
(1)一般清空st的方法如下:
st.s[0] = '/0';
st.x     = 0;
st.y      = 0;
(2) 用memset方法如下:
memset(&st,0,sizeof(struct _test));
数组:
struct _test   st[10];
则用    memset(st,0,sizeof(struct _test)*10);

(2)memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
可以拿它拷贝任何数据类型的对象。


例:char a[10],b[5];
memcpy(b, a, sizeof(b));
/*注意如果用sizeof(a),会造成b的内存地址溢出*/
(3) Strcpy  
原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。

例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘/0’之前)是否超过50位,如超过,则会造成b的内存地址溢出

(4) 三者区别  
memset   主要应用是初始化某个内存空间。
memcpy   是用于copy源空间的数据到目的空间中。
strcpy       用于字符串copy,遇到‘/0’,将结束。
如果理解了这些,就能知道它们的区别:
例如初始化某块空间的时候,用到memcpy,那么就显得很笨拙了。
int m[100]
memset((void*)m,0x00,sizeof(int)*100);           //Ok!
memcpy((void*)m,"/0/0/0/0....",sizeof(int)*100); //Not Ok!

Strcpy和Strncpy的区别- -
第一种情况:
char* p="how are you ?";
char name[20]="ABCDEFGHIJKLMNOPQRS";

strcpy(name,p); //name改变为"how are you ? OPQRS " ====>错误!
strncpy(name,p,sizeof(name)) //name改变为"how are you ? " ====>正确!

第二种情况:
char* p="how are you ?";
char name[20];

strcpy(name,p); //name改变为"how are you ? 未知字符 " ====>错误!
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!

strncpy(sptsf_cert.peer_ditm_no,clr_total.payint_acc+7,8) //从第8位后8位拷贝
strncpy(sptsf_cert.recv_inst,clr_total.payint_acc,4);//拷贝前四位

为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/wenleiworld/blog/item/175e072ad002aef0e6cd4033.html

从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验相关推荐

  1. 华为boss力荐公司高层看的一篇文章,很长很经典 很值得一看

    今天是 22 岁的最后一天.几个月前,我从沃顿商学院毕业,用文凭上"最高荣誉毕业"的标签安抚了已经年过半百的老妈,然后转头辞去了毕业后的第一份工作,跟一家很受尊敬的公司.还有 15 ...

  2. 一篇文章,讲透如何打造超级产品,看完你还怕企业被市场淘汰吗?

    产品怎么打造成超级产品? 很多企业管理者都会对此进行思考,却很少人能够真正理解. 这篇文章根据艾老思文章中所提到的方法,尝试给大家找到答案! 01 打造超级产品的前提 在消费升级的时代,很少人能够抓住 ...

  3. 这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多

    strcpy与strncpy函数 (1) Memset 原型:extern void *memset(void *buffer, int c, int count); 用法:#include 功能:把 ...

  4. 非常励志的一篇文章,请慢慢细读,品读,从中找到你想要的答案

    为什么80%的码农都做不了架构师?>>>    如果这篇文章没有分享给你,那是我的错. 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我. 如果你看了这篇文章,只读了一半你 ...

  5. 我们工作到底为了什么(这篇文章很重要)----强烈推荐

    HP大中华区总裁孙振耀退休感言 如果这篇文章没有分享给你,那是我的错. 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我. 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个&qu ...

  6. html5用户自定义错误信息,HTML_HTML5设计网页时应该避免的一些小错误,在这篇文章中,我将给大家分 - phpStudy...

    在这篇文章中,我将给大家分享html5构建页面的小错误和不好的实践方法,让我们在以后的工作中避免这些错误. 不要把 当成容器来定义样式 我们经常看到的一个错误,就是武断的将 标签用标签来替代,特别是将 ...

  7. 细心看完这篇文章,刷新对Javascript Prototype的理解

    var person={name:'ninja'}; person.prototype.sayName=function(){return this.name; } 分析上面这段代码,看看有没有问题? ...

  8. Vue开发入门看这篇文章就够了

    摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...

  9. Spring 事务失效?看这篇文章就够了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景? 不知道小伙伴们有没有这样的经历,在自己开心的编 ...

最新文章

  1. Eclipse中10个最有用的快捷键组合
  2. 用自定义IHttpModule实现URL重写
  3. opencv视频处理和检测学习总结
  4. android pcm频谱_Android音频可视化
  5. 在WebRTC上实现ML Kit笑容检测
  6. ES6公用分页组件的封装及应用举例
  7. IHS Infonetics:网络运营商进军SDN
  8. 使用Java将HTML转成Word格式文件
  9. leetcode题解236-二叉树的最近公共祖先
  10. jQuery放大镜插件
  11. VirtualBox 虚拟 CentOS 7 磁盘扩容
  12. g40-45支持虚拟化技术_虚拟化技术与原理简介
  13. 第三届泰迪杯数据挖掘技能赛一等奖总结经验分享
  14. Android逆向之路---让我们试试另一种方法看漫画-(1)
  15. latex学习笔记——latex的字体字号设置
  16. 电脑桌面变窄屏,两端为黑色
  17. 电赛硬件电路设计抗干扰措施
  18. Java中getBytes()方法--使用详解
  19. 想要制作令人震撼的大屏可视化,要如何提升自己的可视化效果?
  20. http报文格式简介

热门文章

  1. Linux下Bond技术怎样实现负载均衡的步骤
  2. Typecho程序伪静态规则大全(包括Linux/Windows
  3. php 23种设计模型 - 装饰模式
  4. maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释
  5. mysql闪退或者can not connect 127.0.0.1
  6. 利用javascript和WebGL绘制地球 【翻译】
  7. 测试常用shell语句——数值,数组类型;函数创建
  8. 各种 分页存储过程整理
  9. SQL触发器实例讲解1
  10. 一张图看明白Git的四个区五种状态