打印自身的C++代码
2009-11-12 19:51
141 查看
大家可以先思考,想想如何写出这样的代码,然后再看看下面的代码是否与你的思路差不多。
注意: 展开后有很长一段字符数组定义(char sz[]=....)
#include <stdio.h>
#include <string.h>
char sz[] = {0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x73,0x74,0x64,0x69,0x6f,0x2e,0x68,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x73,0x74,0x72,0x69,0x6e,0x67,0x2e,0x68,0x3e,0x0a,0x63,0x68,0x61,0x72,0x20,0x73,0x7a,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x25,0x73,0x7d,0x3b,0x0a,0x69,0x6e,0x74,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x69,0x6e,0x74,0x20,0x69,0x3b,0x0a,0x63,0x68,0x61,0x72,0x20,0x62,0x75,0x66,0x5b,0x34,0x30,0x39,0x36,0x30,0x5d,0x3b,0x0a,0x63,0x68,0x61,0x72,0x20,0x66,0x6d,0x74,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x30,0x78,0x33,0x30,0x2c,0x30,0x78,0x37,0x38,0x2c,0x30,0x78,0x32,0x35,0x2c,0x30,0x78,0x33,0x30,0x2c,0x30,0x78,0x33,0x32,0x2c,0x30,0x78,0x37,0x38,0x2c,0x30,0x7d,0x3b,0x0a,0x66,0x6f,0x72,0x28,0x20,0x69,0x20,0x3d,0x20,0x30,0x20,0x3b,0x20,0x69,0x20,0x3c,0x20,0x73,0x69,0x7a,0x65,0x6f,0x66,0x28,0x73,0x7a,0x29,0x20,0x3b,0x20,0x69,0x20,0x2b,0x2b,0x20,0x29,0x0a,0x7b,0x0a,0x69,0x66,0x28,0x20,0x69,0x20,0x3e,0x20,0x30,0x20,0x29,0x20,0x73,0x74,0x72,0x63,0x61,0x74,0x28,0x20,0x62,0x75,0x66,0x2c,0x20,0x22,0x2c,0x22,0x20,0x29,0x3b,0x0a,0x73,0x70,0x72,0x69,0x6e,0x74,0x66,0x28,0x20,0x62,0x75,0x66,0x2b,0x69,0x2a,0x35,0x2c,0x20,0x66,0x6d,0x74,0x2c,0x20,0x73,0x7a,0x5b,0x69,0x5d,0x20,0x29,0x3b,0x0a,0x7d,0x0a,0x70,0x72,0x69,0x6e,0x74,0x66,0x28,0x20,0x73,0x7a,0x2c,0x20,0x62,0x75,0x66,0x20,0x29,0x3b,0x0a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x00};
int main()
{
int i;
char buf[40960];
char fmt[] = {0x30,0x78,0x25,0x30,0x32,0x78,0};
for( i = 0 ; i < sizeof(sz) ; i ++ )
{
if( i > 0 ) strcat( buf, "," );
sprintf( buf+i*5, fmt, sz[i] );
}
printf( sz, buf );
return 0;
}
BTW,代码是我的同事LiuB完成的,必须得提及一下,不然会被K的。。。:)
注意: 展开后有很长一段字符数组定义(char sz[]=....)
#include <stdio.h>
#include <string.h>
char sz[] = {0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x73,0x74,0x64,0x69,0x6f,0x2e,0x68,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x73,0x74,0x72,0x69,0x6e,0x67,0x2e,0x68,0x3e,0x0a,0x63,0x68,0x61,0x72,0x20,0x73,0x7a,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x25,0x73,0x7d,0x3b,0x0a,0x69,0x6e,0x74,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x69,0x6e,0x74,0x20,0x69,0x3b,0x0a,0x63,0x68,0x61,0x72,0x20,0x62,0x75,0x66,0x5b,0x34,0x30,0x39,0x36,0x30,0x5d,0x3b,0x0a,0x63,0x68,0x61,0x72,0x20,0x66,0x6d,0x74,0x5b,0x5d,0x20,0x3d,0x20,0x7b,0x30,0x78,0x33,0x30,0x2c,0x30,0x78,0x37,0x38,0x2c,0x30,0x78,0x32,0x35,0x2c,0x30,0x78,0x33,0x30,0x2c,0x30,0x78,0x33,0x32,0x2c,0x30,0x78,0x37,0x38,0x2c,0x30,0x7d,0x3b,0x0a,0x66,0x6f,0x72,0x28,0x20,0x69,0x20,0x3d,0x20,0x30,0x20,0x3b,0x20,0x69,0x20,0x3c,0x20,0x73,0x69,0x7a,0x65,0x6f,0x66,0x28,0x73,0x7a,0x29,0x20,0x3b,0x20,0x69,0x20,0x2b,0x2b,0x20,0x29,0x0a,0x7b,0x0a,0x69,0x66,0x28,0x20,0x69,0x20,0x3e,0x20,0x30,0x20,0x29,0x20,0x73,0x74,0x72,0x63,0x61,0x74,0x28,0x20,0x62,0x75,0x66,0x2c,0x20,0x22,0x2c,0x22,0x20,0x29,0x3b,0x0a,0x73,0x70,0x72,0x69,0x6e,0x74,0x66,0x28,0x20,0x62,0x75,0x66,0x2b,0x69,0x2a,0x35,0x2c,0x20,0x66,0x6d,0x74,0x2c,0x20,0x73,0x7a,0x5b,0x69,0x5d,0x20,0x29,0x3b,0x0a,0x7d,0x0a,0x70,0x72,0x69,0x6e,0x74,0x66,0x28,0x20,0x73,0x7a,0x2c,0x20,0x62,0x75,0x66,0x20,0x29,0x3b,0x0a,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x00};
int main()
{
int i;
char buf[40960];
char fmt[] = {0x30,0x78,0x25,0x30,0x32,0x78,0};
for( i = 0 ; i < sizeof(sz) ; i ++ )
{
if( i > 0 ) strcat( buf, "," );
sprintf( buf+i*5, fmt, sz[i] );
}
printf( sz, buf );
return 0;
}
BTW,代码是我的同事LiuB完成的,必须得提及一下,不然会被K的。。。:)
相关文章推荐
- 程序打印自身代码的两种方法
- 神奇的c语言代码,打印代码自身(来自知乎)
- 程序打印自身代码的两种方法
- 打印自身代码的C语言小程序
- (转)java 打印自身代码——真实世界不存在自指
- 2014年第五届蓝桥杯C/C++程序设计本科B组省赛 打印图形(代码填空)
- C#不使用ReportViewer直接打印Report文件(rdlc)的实现代码
- c# 抓屏打印代码
- 矩阵螺旋输出打印原代码
- DevExpress打印通用代码
- 算法,java代码实现打印万年历
- 98、2000和XP系统自定义打印纸张的VB代码
- 链表的添加、查找删除、反向打印c++代码
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- vbs后台运行bat删除自身的代码
- C#中代码Dialog控件实现(打开,保存,改变字体,颜色,打印功能)
- 【BestCoder Round #81 (div.2)】【HDU5670&5671&5672】题意&题解&代码(C++)
- 代码打印调试的模版
- 如何打印日志代码
- DevExpress打印相关代码