这段程序应该每运行一次的结果都不完全一致。具体原因是这样:这个问题想说明白不太容易,我以下瞎说,你就瞎看吧。

char s[] = "123456789", r[9];

相当于定义了s数组,具体存到内存中占用了10个连续存储单元,其实1-9分别占用一个字节,最后系统还默认添加了00000000到最后一个字节中,为了标识字符串结束。

在进行strlen(s)时,该函数由s的首地址开始查找,查找到00000000的结束符结束,返回长度为9是正确的。31 32 33 34 35 36 37 38 39 00 内存地址的实际值

1 2 3 4 5 6 7 8 9 \0 转换为ascii后的值

s 内存指针

r[9]就比较随机了,该语句代码划分一段长度为9的内存空间,并将此空间的首地址给r。但由于该内存中本来就存在以下值(假设):00001100 00101010 00000000 ....,所以在进行strlen(r)时,同样是由首地址开始找,找到第三个00000000结束符后结束,返回长度为2.?? ?? 00 ?? ?? ?? ?? ?? ?? 内存地址的实际值

? ? \0 ? ? ? ? ? ? 转换为ascii后的值

r 内存指针

打??代表不知道其具体值,但前两个??的值必然不是00。

由于内存中的值是不固定的,所以这个2必然也是随机的,这次可能为2,下次还可能为3,4,5,这个依赖于当前内存中数据的实际情况。

长度变成18原因,也是根据当前内存情况决定的。由于在运行程序的时候恰恰这样的分配的内存:?? ?? 00 ?? ?? ?? ?? ?? ?? 31 32 33 34 35 36 37 38 39 00 内存地址的实际值

? ? \0 ? ? ? ? ? ? 1 2 3 4 5 6 7 8 9 \0 转换为ascii后的值

r s 内存指针

其中\0为字符串结束符,在内存中的值为00000000,转成16进制简写为00

然后当执行你上面的程序后,最后变成了这样:39 38 37 36 35 34 33 32 31 31 32 33 34 35 36 37 38 39 00 内存地址的实际值

9 8 7 6 5 4 3 3 2 1 2 3 4 5 6 7 8 9 \0 转换为ascii后的值

r s 内存指针

此时当我们在执行strlen(r)以及打印其值时,仍然是由r的起始位置开始,一直找到 00 结束符。这也就是你后面两个问题产生的原因。

c语言 字节数组赋值,C语言数组赋值。相关推荐

  1. c语言字节写入文件,C语言文件操作

    所谓文件(file)一般指存储在外部介质上数据的集合,比如我们经常使用的mp3.mp4.txt.bmp.jpg.exe.rmvb等等.这些文件各有各的用途,我们通常将它们存放在磁盘或者可移动盘等介质中 ...

  2. c语言字节强制对齐,C语言的那些小秘密之字节对齐

    为了让读者加深印象,我们这里在代码中没有使用0,而是使用的4,所以在最终计算出的结果部分减去了一个4才是偏移地址,当然实际使用中我们都是用的是0. 懂了上面的宏offsetof之后我们再来看看下面的代 ...

  3. 点阵c语言字节数,用C语言编程16点阵字库!

    程序如下,只要说明各函数模块的功能即可: #include #include #include #include #include #include #include #define GETADR(n ...

  4. c语言中的字节和元素,C语言指向数组元素的指针

    指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...

  5. access vba 常量数组赋值_09c语言数组详解

    数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组. 在C语言中, 数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组 ...

  6. qt 二维数组初始化_C语言二维数组的定义、初始化、赋值

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍 二维 ...

  7. delphi数组与c语言数组不同,delphi数组间的赋值

    解决方案: 将this指针作为参数传递给静态函数,这样可以通过该this指针访问所有的私有变量, 但是我要是还需要向静态函数中传递我自己需要的参数呢.在函数参数中使用数组的时候,数组将被转换为指针处理 ...

  8. c语言中通过键盘给一维数组赋值怎么_编程C语言进阶篇——构造类型:数组

    在c语言的实际应用中,我们常常需要同时对多个数据进行处理,如果没有专门批量处理数据的方法,就会给我们的程序编写造成巨大的影响.而这种批量处理数据的方法就是我们这次的主题--数组. 一.数组是什么 在c ...

  9. c语言中数组部分输入赋值,c语言scanf对数组赋值

    c语言动态数组赋值,,c语言结构体数组赋值,c语言scanf对数组赋值 c语言数组动态赋值,<手把手教你学51单片机-C语言>之六 中断与数码管动态显示,c语言结构体数组赋值,c语言sca ...

  10. c语言大数组赋值,C语言之数组(上)

    因为我们随着面临的问题越来越复杂,要用的变量越来越多,为了偷懒,就把同类型的变量一块儿定义了--数组的诞生,但是很烦的是我们要在使用一个更方便的工具的时候得知道它是怎么用的,接下来就让我们一起捋捋这些 ...

最新文章

  1. 十年公务员转行IT,自学AI三年,他淬炼出746页机器学习入门笔记
  2. Operations on word vectors-v2 吴恩达老师深度学习课程第五课第二周编程作业1
  3. BZOJ4590 [Shoi2015]自动刷题机
  4. 《SOA与REST:用REST构建企业级SOA解决方案》—第2章2.1节如何使用案例研究
  5. 一个使用:focus-within伪类实现的button选中动画效果
  6. python归一化改变图像大小_基于Python+PIL-Speed问题的图像强度归一化
  7. Windows Server 2008搭建域环境---安装活动目录
  8. KMP算法字符串模式匹配
  9. MobileNetV3论文译读笔记
  10. Java面试题:程序计数器为什么是私有的?
  11. python中库是什么意思_python库是什么意思
  12. 使用libevhtp搭建HTTPS SERVER(单向验证身份)
  13. web打包app(h5+app)版本自动更新的实现
  14. 在Linux下配置打印机
  15. 福禄克FLUKE BT521 BT520 BT510 BT508护航储能电池安全
  16. 李佩:阿里本地生活线上线下融合场景中的图像检测技术
  17. 3.Regression(二)
  18. tesseract第三方图文验证码识别用法
  19. Android软件安全与逆向分析下载电子书pdf下载
  20. 【人脸识别】基于dlib库实现人脸特征值提取

热门文章

  1. idea中大于等于,不等于、小于等于等等这些符号发生了变化
  2. 十年辗转4厂,百场校、社招面试后,kotlin源码
  3. 2021 New Year‘s Resolution
  4. 面试获得好感的最快、最简单、最便宜的方法
  5. 【Unity3D】Unity3D Mecanim动画系统骨骼动画问题解决方法
  6. GIS空间分析 地统计分析2 探索性数据分析
  7. 【opencv】 斑点检测 impleBlobDetector
  8. 【NOIP2012】国王游戏(一类全序问题)
  9. 原子物理中的组合常数 与astropy包中的科学数据
  10. 自定义百度云资源分享密码