全站数据
8 4 2 0 5 8 1

printf函数中用到格式符%5s其中数字5表示输出的字符串占用5列如果字符串长度大于5输出按方式

弘博考研 | 简单学习,快乐成才!         
问题更新日期:2024-10-29 15:25:29

问题描述

printf函数中用到格式符%5s其中数字5表示输出的字符串占用5列如果字符串长度大于5输出按方式,麻烦给回复
精选答案
最佳答案

有趣,一句话来回答就是,printf会按照顺序从栈里面读取数据输出。因为函数参数是通过栈传递的,如果参数不够,就会打印出内存里面的一些垃圾数据了。

至于栈和函数参数传递等等一堆知识就比较复杂了,一句话聊不完。题主可以这么认为,函数参数放在一个数组里传给printf,然后printf依次读出来打印。但是数组不够长,就读到其他内存了。

如果题主还想知道更多,比如打印出来的垃圾数据到底是什么意思,这个比较复杂,需要逆向调试才能确定,就不要瞎猜了。

真的有兴趣了解的话,可以尝试学一学二进制安全。专门有一类漏洞是因为printf的这种特性引起的,我们一般称之为格式化字符串漏洞。这个就很有意思了。

其他回答

%5s其中的5不是表示占据5列,%s是字符串的输出符号。%s输出字符串的时候,相当于地址会自动加1,意义就是你所要输出的字符串的指针变量,比如 printf(

"%5s