看csapp时候,看一下char*[8],以为char*也是一字节,但是指针是地址,64位编译器下是8字节,所以sizeof(B)是64字节

后来又看strlen()。

 #include"stdio.h"
#include"string.h"
int main(void){
char B[]; printf("%d",strlen(B)); return ;
}

运行后,发现结果,有点蹊跷,有时候是0,有时候是6。

strlen在计算数组长度的时候是遇到‘\0’时计算就停止。

如果不在字符数组后面加上‘\0’,那么strlen就会一直计算下去,直到遇到内存中的'\0',才停止计算。

可以看到在内存的某处存在‘\0’,由于strlen会遇到‘\0’时才停止计算长度,所以算出来的长度并不是字符数组的真实长度,而且这个值是随机的。

这就告诉我们:

1.对数组使用strlen()时,要确保数组中有\0结束符

2.联想到strncpy等操作,如果按strlen后的长度复制字符串,要记得在结尾加个\0

其实,每个这种函数,对未初始化的数组做操作,都存在这种风险,这是我们开发过程中需要重点留意的。

最新文章

  1. 忽略this的后果
  2. linux samba 服务器 简单配置
  3. Sublime发布Markdown博客
  4. effective c++(04)之对象使用前初始化
  5. c#,if 分支语句,条件运算符
  6. UITableView初始
  7. 学习PID
  8. JavaScript日历控件开发
  9. SQLServer插入数据
  10. 聊聊动态语言那些事(Python)
  11. "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to ma
  12. ubuntu编译安装nginx
  13. Linux的IO模型
  14. HttpClient后台post 请求webapi
  15. List原理
  16. GSM信道分类
  17. json_encode 中文 null
  18. WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/
  19. table 样式美化
  20. 201621123037 《Java程序设计》第8周学习总结

热门文章

  1. html 标签 frame
  2. Vue 使用MD5 加密
  3. vc code js 配置
  4. JSP页面中关于<c:if test="${...}"><c:if>标签的用法
  5. JAVA web课堂测试1
  6. php类的魔术方法也就是带下划线的类方法介绍及应用
  7. Android 华为推送库下载不了
  8. i.MX RT600之DSP开发环境调试篇
  9. Pycharm创建一个Django项目
  10. Plastic Sprayer Manufacturer - Sprayer: How Does It Work?