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

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. 人工智能岗位替代----办公文员
  2. Win10+libtorch1.1+opencv 笔记
  3. 后台返回数据打印是[object object]的,报错:SyntaxError: JSON.parse: expected property name or ‘}‘ at line 1 column
  4. matlab为自定义后缀文件设置图标_【V3.0更新】| 这可能是全网最好用的文件管理神器了......
  5. 漫画:35岁的IT会不会失业?
  6. hadoop php mysql_PHP+Hadoop+Hive+Thrift+Mysql实现数据统计分析
  7. 网易逆水寒服务器型号,从服务器爆满到无人问津的经典游戏
  8. python做软件测试需要那些条件_做软件测试需要学什么
  9. Linux BASH多进程并行处理的方法实现
  10. vmware的原理和影子页表
  11. Convert Sorted List to Binary Search Tree ------C++ 递归创建平衡二叉查找树
  12. lepus监控oracle数据库_数据库监控软件Lepus之修改admin密码
  13. linux+3.10.0.tar.bz2,tensorflow在linux系统上的安装
  14. GB50174《电子信息系统机房设计规范》福州再掀培训热潮
  15. html语言怎么插入视频,如何在HTML5网页中插入 Video(视频)
  16. 东周科目三考场5号线_光明东周科目三考场,5条道图纸心得分享
  17. VLClclc Plugin Object的方法
  18. 高效的 Linux 限流神器Trickle
  19. 应用程序正常初始化 0xc015002 失败
  20. 中国历史上的著名识才用才智慧

热门文章

  1. 线段树SegmentTree
  2. 精华贴子整理之SQL性能优化
  3. 一个外贸soho的生意经:逆向生意,正向赚钱
  4. OCR字符识别技术总览
  5. 降维算法_LDA_PAC
  6. k8s 监控 metric-server cpu 内存单位换算
  7. JavaScript的if的分支语句
  8. 【cocos精品】《三国之刃》:腾讯首款三国炫技格斗手游
  9. Android 抽象布局介绍和简单的使用
  10. 2019/07/30_course_python_4_input()函数 / 人机互相沟通