好久没写博客了,CSDN似乎更新了代码高亮代码,贴段代码试试吧。 有次部门开会,我能力差,听不懂,又太无聊,尝试写了个自复制程序,C版本的。 #include <stdio.h> #include <string.h> #define MODE_NORMAL 0 #define MODE_LITER 1 void myprint(char* str, int mode, int len) { switch (mode) { case MODE_NORMAL: if (len < 0) printf("%s", str); else { int i; for (i = 0; i < len; i++) putchar(str[i]); } break; case MODE_LITER: if (len < 0) len = strlen(str); { int i; putchar('/"'); for (i = 0; i < len; i++) { if (str[i] == '/n') {printf("//n"); continue;} if (str[i] == '/"') {printf("///""); continue;} if (str[i] == '//') {printf(""); continue;} putchar(str[i]); } putchar('/"'); } break; } } char* p = "#include <stdio.h>/n#include <string.h>/n/n#define MODE_NORMAL 0/n#define MODE_LITER 1/n/nvoid myprint(char* str, int mode, int len)/n{/n switch (mode) {/n case MODE_NORMAL:/n if (len < 0)/n printf(/"%s/", str);/n else {/n int i;/n for (i = 0; i < len; i++)/n putchar(str[i]);/n }/n break;/n case MODE_LITER:/n if (len < 0)/n len = strlen(str);/n {/n int i;/n putchar('///"');/n for (i = 0; i < len; i++) {/n if (str[i] == '//n') {printf(/"n/"); continue;}/n if (str[i] == '///"') {printf(/"///"/"); continue;}/n if (str[i] == '') {printf(/"/"); continue;}/n putchar(str[i]);/n }/n putchar('///"');/n }/n break;/n }/n}/n/nint main(int argc, char** argv)/n{/n myprint(p, MODE_NORMAL, 620);/n myprint(/"char* p = /", MODE_NORMAL, -1);/n myprint(p, MODE_LITER, -1);/n putchar(';');/n myprint(p+618, MODE_NORMAL, -1);/n return 0;/n}/n"; int main(int argc, char** argv) { myprint(p, MODE_NORMAL, 620); myprint("char* p = ", MODE_NORMAL, -1); myprint(p, MODE_LITER, -1); putchar(';'); myprint(p+618, MODE_NORMAL, -1); return 0; }