打印自己源代码的程序

几天前网上看到一篇用Java写的打印自己源代码的程序,感觉挺有意思,于是写了一个C语言打印自己的程序。所谓打印自己,就是不是通过打开源代码文件,而是代码的目的就是打印出和源代码一样的字符来。
这是我写的:
#include
#include
static char *stats[100];
static int  count=0;
char *convert(char *str)
{
  int len = strlen(str);
  char *newStr = new char[len+100];
  int i=0, j=0;
  while(i<=len)
  {
    if (str[i] == 34)
    {
      newStr[j] = 92; newStr[j+1] = 34;
      i++; j+=2;
    }
    else
    {
      newStr[j] = str[i];
      i++; j++;
    }
  }
  return newStr;
}
void p1(char *str)
{
  stats[count++] = convert(str);
  printf("%s%c", str, 10);
}
void p2()
{
  for(int i=0; i  {
    printf("p1(%c%s%c);%c", 34, stats[i], 34, 10);
  }
  printf("  p2();%c", 10);
  printf("}%c", 10);
}
int main()
{
  p1("#include ");
  p1("#include ");
  p1("static char *stats[100];");
  p1("static int  count=0;");
  p1("char *convert(char *str)");
  p1("{");
  p1("   int len = strlen(str);");
  p1("   char *newStr = new char[len+100];");
  p1("   int i=0, j=0;");
  p1("     while(i<=len)");
  p1("       {");
  p1("          if (str[i] == 34)");
  p1("          {");
  p1("             newStr[j] = 92; newStr[j+1] = 34;");
  p1("             i++; j+=2;");
  p1("           }");
  p1("           else");
  p1("           {");
  p1("              newStr[j] = str[i];");
  p1("              i++; j++;");
  p1("           }");
  p1("        }");
  p1("   return newStr;");
  p1("}");
  p1("void p1(char *str)");
  p1("{");
  p1("   stats[count++] = convert(str);");
  p1("   printf(/"%s%c/", str, 10);");
  p1("}");
  p1("void p2()");
  p1("{");
  p1("   for(int i=0; i  p1("   {");
  p1("      printf(/"p1(%c%s%c);%c/", 34, stats[i], 34, 10);");
  p1("   }");
  p1("   printf(/"  p2();%c/", 10);");
  p1("   printf(/"}%c/", 10);");
  p1("}");
  p1("int main()");
  p1("{");
  p2();
}

不料,今天在网上看到某强人写的,才知道可以更加简洁搞定
#include
int main()
{
  char *p ="#include %c int main(){char *p=%c%s%c; printf(p, 10, 34, p, 34);}";
  printf(p, 10, 34, p, 34);
}



后一个程序要简洁漂亮得多了




你可能感兴趣的:(打印自己源代码的程序)