对于strlen()函数的一点小疑问
2024-10-08 15:26:03
看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
其实,每个这种函数,对未初始化的数组做操作,都存在这种风险,这是我们开发过程中需要重点留意的。
最新文章
- 忽略this的后果
- linux samba 服务器 简单配置
- Sublime发布Markdown博客
- effective c++(04)之对象使用前初始化
- c#,if 分支语句,条件运算符
- UITableView初始
- 学习PID
- JavaScript日历控件开发
- SQLServer插入数据
- 聊聊动态语言那些事(Python)
- ";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
- ubuntu编译安装nginx
- Linux的IO模型
- HttpClient后台post 请求webapi
- List原理
- GSM信道分类
- json_encode 中文 null
- WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/
- table 样式美化
- 201621123037 《Java程序设计》第8周学习总结
热门文章
- html 标签 frame
- Vue 使用MD5 加密
- vc code js 配置
- JSP页面中关于<;c:if test=";${...}";>;<;c:if>;标签的用法
- JAVA web课堂测试1
- php类的魔术方法也就是带下划线的类方法介绍及应用
- Android 华为推送库下载不了
- i.MX RT600之DSP开发环境调试篇
- Pycharm创建一个Django项目
- Plastic Sprayer Manufacturer - Sprayer: How Does It Work?