Click on selfprint3.c to get source.
#include <stdio.h>
#include <string.h>

char* S[] = {"};/*S[]*/",
"",
"/* the array of strings S is a",
" * representation of the body",
" * of the program from '0'",
" * to the end",
" */",
"",
"int main(void)",
"{int i, j;",
" printf(\"#include <stdio.h>\\n#include <string.h>\\n\");",
" printf(\"\\nchar* S[] = {\");",
" for(i=0; S[i]!=0; i++)",
"   {printf(\"\\\"\");",
"    for(j=0; S[i][j]!=0; j++)",
"       /* treat \", \\, \\n special for the",
"        * declaration of S",
"        */",
"       if(S[i][j] == '\\n') printf(\"\\\\n\");",
"       else if(S[i][j] == '\"') printf(\"\\\\\\\"\");",
"       else if(S[i][j] == '\\\\') printf(\"\\\\\\\\\");",
"       else printf(\"%c\",S[i][j]);",
"    printf(\"\\\",\\n\");",
"   }/*for(i)*/",
" printf(\"0\\n\");",
"",
" for(i=0; S[i]; i++)",
"    if (S[i] == 0) printf(\"\\n\");",
"    else printf(\"%s\\n\",S[i]);",
" return 0;",
"}/*main*/",
0
};/*S[]*/

/* the array of strings S is a
 * representation of the body
 * of the program from '0'
 * to the end
 */

int main(void)
{int i, j;
 printf("#include <stdio.h>\n#include <string.h>\n");
 printf("\nchar* S[] = {");
 for(i=0; S[i]!=0; i++)
   {printf("\"");
    for(j=0; S[i][j]!=0; j++)
       /* treat ", \, \n special for the
        * declaration of S
        */
       if(S[i][j] == '\n') printf("\\n");
       else if(S[i][j] == '"') printf("\\\"");
       else if(S[i][j] == '\\') printf("\\\\");
       else printf("%c",S[i][j]);
    printf("\",\n");
   }/*for(i)*/
 printf("0\n");

 for(i=0; S[i]; i++)
    if (S[i] == 0) printf("\n");
    else printf("%s\n",S[i]);
 return 0;
}/*main*/