看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()函数的一点小疑问的更多相关文章

  1. 关于preg_match() / preg_replace()函数的一点小说明

    int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $ ...

  2. 关于preg_match()函数的一点小说明

    int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $ ...

  3. 关于PHP魔术方法__call的一点小发现

    好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现. 我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性.而魔术方 ...

  4. BUI Webapp用于项目中的一点小心得

    接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...

  5. [PHP源码阅读]strlen函数

    文章来自:http://www.hoohack.me/2016/02/22/phps-source-analytics-strlen 我在github有对PHP源码更详细的注解.感兴趣的可以围观一下, ...

  6. 不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数

    不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数. 这是一道面试题,可以使用递归的方式解答,答案如下: #include <stdio.h> int mylen(cha ...

  7. strlen函数

    笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数.函数接口声明如下:int strlen(const char *p); http://soft.chinabyt ...

  8. strlen() 函数

    strlen() 函数通常用来计算字符串的长度,但是今天突然发现个奇怪的现象. 如下所示: #include <stdio.h> #include <stdlib.h> #in ...

  9. C语言strlen函数和sizeof操作符

    字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...

随机推荐

  1. PyQt5绘图API

    PyQt5绘图API大全1.绘图API:绘制文本#1.文本 2.各种图形 3.图像#QPainter painter=QPainter() painter.begin() painter.end() ...

  2. 18 JavaScript字符串方法

    indexOf():从头到尾进行检索.返回指定文本在字符串最后一次出现的索引,否则返回-1.可以指定第二个参数作为起始位置. lastIndexOf:从尾到头进行检索.返回指定文本最后出现的位置,否则 ...

  3. pdf.js的使用 (3)真实项目分享

    需求:a.jsp页面要做一个pdf的预览功能,我采用layer.open()弹窗的形式来预览pdf 1.在a.jsp点击文件然后弹出窗口(其实是弹出b.jsp) var lay=layer.open( ...

  4. 临时解决执行 Composer Install 返回 Killed 的问题

    昨天在 Linux 服务器上部署 PHP 项目时遇到了一个问题,系统为 Centos 7 ,1 核 1G 的配置.通过 Git 拉取代码后,由于是基于 Laravel 框架的项目,所以需要使用 Com ...

  5. bat获取当前路径

    @echo off setlocal EnableDelayedExpansion echo 当前正在运行的批处理文件所在路径:!cd! pause @echo off echo 当前目录是:%cd% ...

  6. html js中的引号

    content = "<a class='btn' href='javascript:void(0)' onclick='change('orders/orderTail.do?ode ...

  7. Python - 同时运行两个以上的脚本

    在c.py中 import os os.system("python a.py") os.system("python b.py")

  8. springmvc_ajax异步上传文件(基于ajaxfileupload.js)

    引入js <script th:src="@{/js/ajaxfileupload.js}"></script> html <tr> <t ...

  9. Scrapy 爬取动态页面

    目前绝大多数的网站的页面都是冬天页面,动态页面中的部分内容是浏览器运行页面中的JavaScript 脚本动态生成的,爬取相对比较困难 先来看一个很简单的动态页面的例子,在浏览器中打开 http://q ...

  10. js 模拟鼠标拖动

    window.addEventListener('message', function (event) { if (event.source != window) return; if (event. ...