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));
来彻底清除,
上述问题的关键在于:
如何理解字符串和简单内存字符数据的区别!
- strcpy的误解
- string.h的误解
- TDD的误解
- 对Unicode的误解
- pfc_save 的误解
- 一种误解的臆想
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- TDD的误解
- 关于inline的误解
- iPhone 开发中内存管理注意事项 TOP 8
- SMTP响应码的简要说明
- MFC:thunk技术完成窗口类地封装
- Java连接access数据库
- 三极管PNP NPN 的判别
- strcpy的误解
- Ubuntu 安装 resin
- 一个K-means聚类算法的实现代码和分析
- QT的TCP网络编程
- 并查集学习
- SAP BW学习第一课:BW建模——总账练习操作步骤记录
- php_mysql
- QT的文件传输
- 这是一个关于ruby on rails的博客测试 test