对于strlen()函数的一点小疑问
看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
其实,每个这种函数,对未初始化的数组做操作,都存在这种风险,这是我们开发过程中需要重点留意的。
对于strlen()函数的一点小疑问的更多相关文章
- 关于preg_match() / preg_replace()函数的一点小说明
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $ ...
- 关于preg_match()函数的一点小说明
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $ ...
- 关于PHP魔术方法__call的一点小发现
好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现. 我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性.而魔术方 ...
- BUI Webapp用于项目中的一点小心得
接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...
- [PHP源码阅读]strlen函数
文章来自:http://www.hoohack.me/2016/02/22/phps-source-analytics-strlen 我在github有对PHP源码更详细的注解.感兴趣的可以围观一下, ...
- 不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数
不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数. 这是一道面试题,可以使用递归的方式解答,答案如下: #include <stdio.h> int mylen(cha ...
- strlen函数
笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数.函数接口声明如下:int strlen(const char *p); http://soft.chinabyt ...
- strlen() 函数
strlen() 函数通常用来计算字符串的长度,但是今天突然发现个奇怪的现象. 如下所示: #include <stdio.h> #include <stdlib.h> #in ...
- C语言strlen函数和sizeof操作符
字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...
随机推荐
- 语义化标签&唯一性标签
语义化标签 em\i表示倾斜,b\strong表示加粗,但其中只有strong和em具有着重的语义 img:alt属性当图片无法显示,显示alt的文字,根本需求是为了SEO,是必须属性,alt属性长度 ...
- java课极限测试
在临近国庆的9月30号补课日 碰到了惨绝人寰的java课极限测试 我从下午两点半做到晚上九点 不得不说人在烦躁的时候是真的没办法写代码的 根本不想思考也不想学习.最后的几个小时基本就是在叹息和坐着.也 ...
- 手机远控SpyNote教程+软件
链接:https://pan.baidu.com/s/1q0VVSxK0DCJk2VnOg5RgOA 提取码:1okp 生成一个小马界面.可以看到,和以往的远控一样,做好端口映射,定制图标,包名,版本 ...
- C++11⾥⾯很好⽤的auto声明
本文摘录于柳神笔记: auto 是C++11⾥⾯的新特性,可以让编译器根据初始值类型直接推断变量的类型.⽐如这样: 当然这个在算法⾥⾯最主要的⽤处不是这个,⽽是在STL中使⽤迭代器的时候, auto ...
- Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别
1.Period final修饰,线程安全,ISO-8601日历系统中基于日期的时间量,例如2年3个月4天. 主要属性:年数,月数,天数. /** * The number of years. */ ...
- 解决fastjson反序列化日期0000-00-00失败的方案
解决fastjson反序列化日期0000-00-00失败的方案 22 Jul 2016 一.案例场景复原 示例场景里涉及两个class:TestDemo.java, DateBeanDemo.java ...
- vue学习笔记:vue的认识与特点与获取
Vue了解 Vue:读作 view Vue是一个渐进式框架 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整 ...
- js学习:基本数据类型
数据类型在 js 里面分为两个大类: 基本数据类型 引用数据类型 基本数据类型: 数值 number 各种意义上的数字:整数.小数.浮点数等 正数:100 负数:-100 浮点数,小数:1.234 进 ...
- Caffe2 玩玩回归(Toy Regression)[5]
前言 这一节将讲述如何使用Caffe2的特征进行简单的线性回归学习.主要分为以下几步: - 生成随机数据作为模型的输入 - 用这些数据创建网络 - 自动训练模型 - 查看梯度递减的结果和学习过程中网络 ...
- TensorFlow基础二(Shape)
首先说明tf中tensor有两种shape,分别为static (inferred) shape和dynamic (true) shape,其中static shape用于构建图,由创建这个tenso ...