printf(\"%s %s %s\

printf的linux实现:static int printf(const char *fmt, ...){ va_list args; int i;\t va_start(args, fmt); write(1,printbuf,i=vsprintf(printbuf, fmt, args)); va_end(args); return i;}展开vsprintf会发现这么一句话: case \u0026#39;s\u0026#39;: s = va_arg(args, char *); //...展开va_arg宏:#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)\u0026amp;~(sizeof(int) - 1) )#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) 事实证明输出应该是不确定的。至于那些多打出来的数据参考这个链接:格式化字符串漏
■网友
你可以去查一查“C语言格式化字符串漏洞”恭喜你,你事实上独立发现了这个漏洞当然,如果要进一步的应用,还需要对栈上的数据you更多的了解
■网友
c语言就是这样,自由+危险,该三个你写两个,结果就是不管了,什么都有可能,printf这种参数个数不定的函数,都是通过把参数放在内存的连续的地方来确定参数的,三个%s对应后面三个char*,-----1-----2-----(3)找到第一个第二个,也会一样的在后面找到第三个,只不过这里的东西不是实参传过来的,程序不管这里存的是什么,反正它就认定了这里存的是第三个char*,然后根据这个char*找到第三个字符串,并输出,但这第三个字符串程序没有提供,char*指向哪里也是未知的,这里有什么也是未知的,只会一个一个字节视为char输出,直到遇到0,---------------------------------------每次都一样可能是程序关闭时释放了所有空间,再打开时又申请回来,所有变量包括第三个字符串在内存中的位置都没变,输出也就一样了,可以试试重启,或者过很久再运行试试,应该会有变化……
■网友
错误的代码,完全无法预期的结果。
■网友
腾讯模拟笔试题……我选的是输出 hello world。还是匿了。
■网友
这是腾讯的一个面试题?
■网友
伪码农,初学者,认为貌似是语法糖导致每次输出结果都一样……


    推荐阅读