我遇到了一个在this网站上打印的程序,即打印程序代码。
程序代码是:
#include <stdio.h>
char *program = "#include <stdio.h>%cchar *program = %c%s%c;%cint main()%c{%cprintf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);%c return 0;%c}%c";
//what is this line doing, what is the use of %c and %s and what properties of %c and %s are being used here?
int main()
{
printf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);
//what is this print function doing, and how?
return 0;
}
给出的解释是:
这里的两个关键技巧是使用带有嵌入式%s的字符串 说明符允许字符串在打印时包含自身,以及 使用%c格式说明符允许打印出特殊字符 像换行符一样,否则无法嵌入到输出中 字符串。
我不明白程序是如何运作的。我已经提到了我需要解释的线条,它们如何工作以及它们在做什么。请解释一下。
答案 0 :(得分:8)
char *program = "#include <stdio.h>%cchar *program = %c%s%c;%cint main()%c{%cprintf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);%c return 0;%c}%c";
有一个char指针名称“program”,用于存储字符串,%c和%s分别是char和string参数的格式说明符。
printf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);
printf函数正在打印输出到控制台,10这里是NEWLINE的ASCII代码,34代表“ printf参数正在执行
答案 1 :(得分:2)
Printf打印作为第一个参数给出的字符串(在本例中为*program
中的字符串)替换其他具有%s或%c的参数
%s表示争论是一个字符串,%c是一个字符。
正如笔记所说,它使用%s在程序字符串中打印程序字符串的副本 - 从而制作副本,并使用%c打印字符10(新行)和34 {{1} }
答案 2 :(得分:0)
为了更好地理解,变量program
可能是这样写的:
"#include <stdio.h>\nchar *program = \"%s\";\nint main()\n..."
这个想法是,你运行程序,编译它的输出,运行那个程序,等等。但这只能通过换行的%c值10和双引号的34来完成。
答案 3 :(得分:-2)
这可以使用文件处理来完成。使用任何名称保存程序,并将该名称放在fopen命令的open目录中。 就像我的程序名称是hello.cpp。
这是以下计划
#include <stdio.h>
#include <iostream>
int main()
{
FILE *fp;
fp=fopen("hello.cpp","r");
char ch;
while((ch=fgetc(fp))!=EOF)
{
printf("%c",ch);
}
}