从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验
建议大家多看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.recv_inst,clr_total.payint_acc,4);//拷贝前四位
打开网站 取消
来自: http://hi.baidu.com/wenleiworld/blog/item/175e072ad002aef0e6cd4033.html
从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验相关推荐
- 华为boss力荐公司高层看的一篇文章,很长很经典 很值得一看
今天是 22 岁的最后一天.几个月前,我从沃顿商学院毕业,用文凭上"最高荣誉毕业"的标签安抚了已经年过半百的老妈,然后转头辞去了毕业后的第一份工作,跟一家很受尊敬的公司.还有 15 ...
- 一篇文章,讲透如何打造超级产品,看完你还怕企业被市场淘汰吗?
产品怎么打造成超级产品? 很多企业管理者都会对此进行思考,却很少人能够真正理解. 这篇文章根据艾老思文章中所提到的方法,尝试给大家找到答案! 01 打造超级产品的前提 在消费升级的时代,很少人能够抓住 ...
- 这是我转贴的strcpy函数与strncpy函数的比较,其中有些错误,建议大家还是看msdn,要好的多
strcpy与strncpy函数 (1) Memset 原型:extern void *memset(void *buffer, int c, int count); 用法:#include 功能:把 ...
- 非常励志的一篇文章,请慢慢细读,品读,从中找到你想要的答案
为什么80%的码农都做不了架构师?>>> 如果这篇文章没有分享给你,那是我的错. 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我. 如果你看了这篇文章,只读了一半你 ...
- 我们工作到底为了什么(这篇文章很重要)----强烈推荐
HP大中华区总裁孙振耀退休感言 如果这篇文章没有分享给你,那是我的错. 如果这篇文章分享给你了,你却没有读,继续走弯路的你不要怪我. 如果你看了这篇文章,只读了一半你就说没时间了,说明你已经是个&qu ...
- html5用户自定义错误信息,HTML_HTML5设计网页时应该避免的一些小错误,在这篇文章中,我将给大家分 - phpStudy...
在这篇文章中,我将给大家分享html5构建页面的小错误和不好的实践方法,让我们在以后的工作中避免这些错误. 不要把 当成容器来定义样式 我们经常看到的一个错误,就是武断的将 标签用标签来替代,特别是将 ...
- 细心看完这篇文章,刷新对Javascript Prototype的理解
var person={name:'ninja'}; person.prototype.sayName=function(){return this.name; } 分析上面这段代码,看看有没有问题? ...
- Vue开发入门看这篇文章就够了
摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...
- Spring 事务失效?看这篇文章就够了!
欢迎关注方志朋的博客,回复"666"获面试宝典 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景? 不知道小伙伴们有没有这样的经历,在自己开心的编 ...
最新文章
- Eclipse中10个最有用的快捷键组合
- 用自定义IHttpModule实现URL重写
- opencv视频处理和检测学习总结
- android pcm频谱_Android音频可视化
- 在WebRTC上实现ML Kit笑容检测
- ES6公用分页组件的封装及应用举例
- IHS Infonetics:网络运营商进军SDN
- 使用Java将HTML转成Word格式文件
- leetcode题解236-二叉树的最近公共祖先
- jQuery放大镜插件
- VirtualBox 虚拟 CentOS 7 磁盘扩容
- g40-45支持虚拟化技术_虚拟化技术与原理简介
- 第三届泰迪杯数据挖掘技能赛一等奖总结经验分享
- Android逆向之路---让我们试试另一种方法看漫画-(1)
- latex学习笔记——latex的字体字号设置
- 电脑桌面变窄屏,两端为黑色
- 电赛硬件电路设计抗干扰措施
- Java中getBytes()方法--使用详解
- 想要制作令人震撼的大屏可视化,要如何提升自己的可视化效果?
- http报文格式简介