关于c的字符串的一些小细节以及c在计算机里数组的内存存放
来源:互联网 发布:淘宝店铺代运营协议书 编辑:程序博客网 时间:2024/05/16 15:18
刚在网易云翁恺老师的课堂上刚学到了一些很神奇的东西,感觉受益匪浅,因此特意总结一下,让更多的人知道。
大家先看这样一张图
学过c语言的人肯定知道,造成这种结果的原因是数组越界了,因为定义了大小为8的字符串数组,最多存放的有效字符是7个,而输入的却是8个,但是为什么却只有第一个word没有输出内容而第二个word1却成功输出了呢?因为,在c语言中,不同数组是成栈存放的,即先进后出,一般是由高地址向低地址生长,也就是说我们开辟的word的地址标号要比word1的地址标号要高。
而在一个数组内部,地址排列是自下而上的,即从标号低的地址向标号高的地址排列,因此,word1[7]上面紧跟着的是word[0](即word1的最后一项紧跟word的第一项)。因此,当用户输入12345678的时候,会造成本应该在word1[7]的'\0'却跑到了word[0],造成程序理解word为空字符串(因为在字符串操作里面,'\0'代表字符串终止,因此无论word后面有没有内容都会截止。)
接下来一张为没有越界的
因此这种读入是不安全的,所以你需要限定用户读入的有效字符个数,即scanf(“%7s”,&word);
但是大家不要误解,scanf函数依然是读到空格、tab或回车为止,%7只是限制了读入的有效字符个数。
好了,以上即为本菜鸟(真的是菜鸟)在翁恺老师的视频中所学到的,真心感到翁恺老师讲的很不错。如果有错误的地方或者误解欢迎各位大佬指出!~
阅读全文
0 0
- 关于c的字符串的一些小细节以及c在计算机里数组的内存存放
- 内存管理里的一些小细节
- 关于数组指针,字符串指针的一些小细节
- 关于c->c++过渡的一些小细节
- c语言的一些小细节
- C小知识点:字符数组和字符型指正存放相同数据时使用的内存
- 关于c语言static的一些细节
- 关于scanf,printf以及c中字符串的一些总结
- C 语言里的字符串---字符数组
- <C/C++>指向指针的指针、指向数组的指针以及存放指针的数组
- c代码内存存放细节
- 关于c语言的深入剖析——一些小细节
- c的一些细节问题
- c/c++的一些细节
- C 语言的一些细节
- C语言要注意的一些小细节
- C/C++一些难为人知的小细节
- **static 的作用以及一些小细节**
- CMake
- 魏永征《向媒介侵权讨说法:媒介侵权法律问题》
- docker拉取mysql镜像遇到到问题及解决
- JS——倒数跳转页面
- Linux 安装RealSense 驱动
- 关于c的字符串的一些小细节以及c在计算机里数组的内存存放
- Linux eth0, eth1, ..., eth%d 的生成
- Eclipse常用设置
- 蓝桥杯 算法训练 Lift and Throw
- ElasticSearch里面复杂关系数据的存储方式
- memset函数
- 递归实现一些简单程序
- 图的数组(邻接矩阵)存储实现
- 08 用Django分页器实现文章分页