第一个版本是利用ascii码输出,这个一眼就能认出:
#include<iostream>
int main()
{
unsigned long msg[3]={0x6c6c6568,0x6f772c6f,0x00646c72};
std::cout<<(char*)msg;
return 0;
}
第二个版本比较STL化,将数据copy到标准输出流上:
#include<iostream>
#include<iterator>
int main()
{
char str[]="hello,world!";
std::copy(str,str+sizeof(str)/sizeof(char),
std::ostream_iterator<char>(std::cout));
return 0;
}
第三个版本则更加离奇一点,它利用了栈溢出:
#include<iostream>
void f()
{
std::cout<<"hello,world!";
exit(0);
}
int main()
{
int i;
*(&i+2)=(int)f;
return 0;
}
本文介绍了三种不同的C++程序输出方法:直接利用ASCII码显示字符串、使用STL库中的copy函数配合迭代器实现输出,以及一种通过栈溢出技巧来输出字符串的方式。这些方法不仅展示了C++语言的灵活性,还提供了对底层内存操作和高级STL组件的理解。
3137

被折叠的 条评论
为什么被折叠?



