strcpy的误解

来源:互联网 发布:人工智能 基金 编辑:程序博客网 时间:2024/06/05 18:29

字符串: char dat[5]= "abcd';
在内存中占用4+1=5个字节,其中前4个字节分别存储: abcd,
最后1个字节是:'/0',
表示abcd字符串的结束位置,

这里dat的内存空间至少要5个字节,如果是4个字节, char dat[4];
则:你一定不要将dat当作字符串来使用,否则可能出现如下问题:
1、在输出数据时,例如:printf("%s", dat)  , 可能结果并不是你所想象的,
这个要看在内存中的具体情况,除非在dat之后,即内存位置dat[4]正好为0:
dat[4] == 0,这种情况谁都不好保证的!!!
2、给dat缓冲区赋值:例如:strcpy(dat, "1234") , 很可能会出错!!
因为上面语句的结果是:dat[0]=='1',dat[1]=='2',dat[2]=='3',dat[3]=='4',
dat[4]=='/0', 注意,dat[4]并不是char dat[4]所分配的,即该字节有可能是
别人的存储空间,但是strcpy已经将dat[4]内存位置的数值设置为0了,
因此极有可能错误(甚至程序异常!),除非dat[4]内存位置没有人使用,或者dat[4]内存位置在设置之前的数值刚好已经是0了!

那么,我是如何清除的呢?
简单: dat[0]=0,这样该dat字符串已经被清除了;

如果你将dat当作字节数据来是使用,最好是使用:
memset(dat, 0, sizeof(dat));
来彻底清除,



上述问题的关键在于:
如何理解字符串和简单内存字符数据的区别!

原创粉丝点击