[转贴]打印自身的C程序

来源:互联网 发布:特殊身份知乎 编辑:程序博客网 时间:2024/05/16 15:14

实现自身的打印很简单,按如下步骤实现:
1. 写好一个程序;
2. 定义一个字符串str把原来的代码抄进去;不能显示的字符和特殊字符都用%c替换,如换行、引号、
3. 用一个输出语句printf打印str。注意这里,格式控制的时候,10表示换行,34表示",92表示/,110表示n,9表示/t。
 
 
 
 
随后附另外一个大牛写的,长一点,不过看起来清晰,思路较好:
#include <stdio.h> 
#include <string.h> 

char *restore(char *src) 
{ 
        char *dest, *p; 
        dest = p = new char[strlen(src) * 2]; 
        *p++ = *src++; 
        while(*src) 
        { 
                switch(*src) 
                { 
                case 10: 
                        *p++ = 92; 
                        *p++ = 110; 
                        *p++ = 34; 
                        *p++ = 10; 
                        *p++ = 9; 
                        *p++ = 9; 
                        *p++ = 34; 
                        break; 
                case 34: 
                        *p++ = 92; 
                        *p++ = 34; 
                        break; 
                default: 
                        *p++ = *src; 
                } 
                src++; 
        } 
        *p = 0; 
        return dest; 
} 

int main() 
{ 
        char str[] =  
                "#include <stdio.h>/n" 
                "#include <string.h>/n" 
                "/n" 
                "char *restore(char *src)/n" 
                "{/n" 
                "       char *dest, *p;/n" 
                "       dest = p = new char[strlen(src) * 2];/n" 
                "       *p++ = *src++;/n" 
                "       while(*src)/n" 
                "       {/n" 
                "               switch(*src)/n" 
                "               {/n" 
                "               case 10:/n" 
                "                       *p++ = 92;/n" 
                "                       *p++ = 110;/n" 
                "                       *p++ = 34;/n" 
                "                       *p++ = 10;/n" 
                "                       *p++ = 9;/n" 
                "                       *p++ = 9;/n" 
                "                       *p++ = 34;/n" 
                "                       break;/n" 
                "               case 34:/n" 
                "                       *p++ = 92;/n" 
                "                       *p++ = 34;/n" 
                "                       break;/n" 
                "               default:/n" 
                "                       *p++ = *src;/n" 
                "               }/n" 
                "               src++;/n" 
                "       }/n" 
                "       *p = 0;/n" 
                "       return dest;/n" 
                "}/n" 
                "/n" 
                "int main()/n" 
                "{/n" 
                "       char str[] = /n" 
                "               /"%s/";/n" 
                "       printf(str, restore(str));/n" 
                "/n" 
                "return 0;/n" 
                "}/n" 
                ""; 
        printf(str, restore(str)); 

        return 0; 
}

原创粉丝点击