关于printf 输出字符串的内部运行猜测
来源:互联网 发布:新闻稿发布左盾网络 编辑:程序博客网 时间:2024/06/11 10:03
关于printf 输出字符串的内部运行猜测
最普通的一个例子。
char str[10]="hello!";printf("%s", str);
其中,%s是输出字符串的标志,str是一个地址。这是大家都知道的。再以下是我自己猜测的内容,如果有误希望您能联系我,帮我指出,谢谢。
在系统内存中为str分配了10个字节,str表示其首地址,依次储存的是 h e l l o ! \0 \0 \0 \0 。然后执行printf的时候,读取到%s,让系统知道接下来要用一个读取字符串的方法,输出下面的数据。读取到 str这个首地址时,就以一个字节为单位,依次输出,直到输出的数据值为0为止,即 \0 。故上面的程序段输出结果为 hello! 。
有了这样的猜测,那我们来验证一下。
///1094795585 的二进制 0100 0001 0100 0001 0100 0001 0100 0001 int a[3]={1094795585}; printf("%s\n",a); return 0;
这个程序通过gcc编译运行出来的结果为 AAAA 。
很奇怪是不是,那么就用上面所说的printf的输出字符串的机制来解释下这个问题。
首先,1094795585 这个数字在内存中储存时的二进制代码就是上面写的,由于是int型,每个字节中储存的都是 0100 0001 也就是65,A 的ASCⅡ码值。其次呢,a也是一个地址,是一个空间大小为12个字节的首地址。最后,按照输出字符串的机制进行这个输出,每次读取8位,对应ASCⅡ码值输出对应的字符,直到读取到的为0 。
0 0
- 关于printf 输出字符串的内部运行猜测
- 关于scanf内部运行方式的猜测
- 关于printf的输出
- 关于Meltemi的猜测
- printf的实现原理~(猜测)
- 关于C语言中printf输出字符串的问题!字符串须以'\0'作为结尾。
- 使用printf输出各种格式的字符串
- linux下printf输出字符串的颜色
- Linux下printf输出字符串的颜色
- Linux下 printf 输出字符串的颜色
- Linux下printf输出字符串的颜色
- 使用printf输出各种格式的字符串
- printf输出字符串的一些格式
- printf格式化输出字符串
- 关于 printf("%d",5.01)的输出
- 关于printf输出结果的一些问题
- 关于printf输出格式类型的总结
- 关于编译和运行过程中的字符编码转换的猜测
- 基于easyPR和openalpr的车牌识别研究
- 51nod_1024 矩阵中不重复的元素(对数求解·)
- activeMQ性能优化--对象池管理connection
- 1127
- Java语言基础(六)之 —— 循环结构(while循环)
- 关于printf 输出字符串的内部运行猜测
- pushViewController自定义动画
- nginx 80 443 并存
- addEventListener()与handleEvent()
- 关于RecycleView中保证只有一个条目变化
- 31. SQL (1)
- shell脚本删除指定java进程
- lintcode,字符串全排列
- 1133