有人请给我下面代码的解释。输出如代码后所述。c代码输出混乱
char s[] = "char s[] = %c%s%c; main(){ printf(s,43,s,43); }";
void main(){
printf(s,34,s,34);
}
输出 -
char s[] = "char s[] = %c%s%c; main(){ printf(s,43,s,43); }"; main(){ printf(s,43,s,43); }
有人请给我下面代码的解释。输出如代码后所述。c代码输出混乱
char s[] = "char s[] = %c%s%c; main(){ printf(s,43,s,43); }";
void main(){
printf(s,34,s,34);
}
输出 -
char s[] = "char s[] = %c%s%c; main(){ printf(s,43,s,43); }"; main(){ printf(s,43,s,43); }
您正在使用的字符串作为char s[] = %c%s%c; main(){ printf(s,43,s,43); }
格式化字符串。
第一个参数的格式为%c
。参数是34
。因此它会打印出值为34
的ASCII字符,即"
(一个字符;双引号)。
第二个参数的格式为%s
。参数是相同的格式字符串,char s[] = %c%s%c; main(){ printf(s,43,s,43); }
。所以它打印出相同的字符串。
第三个参数是%c
,也是34
,因此它会打印另一个引号。
就是这样。在部分:
lit --> char s[] =
%c --> "
%s --> char s[] = %c%s%c; main(){ printf(s,43,s,43); }
%c --> "
lit --> ; main(){ printf(s,43,s,43); }
,当放在一起,就是:
char s[] = "char s[] = %c%s%c; main(){ printf(s,43,s,43); }"; main(){ printf(s,43,s,43); }
这是一个简单的自我复制程序。有那么多解释吗? –
它们被称为* quines *。 :-) – oldrinb
在范围内使用没有原型的'printf()'是未定义的行为... :) – pmg