Nazywa się to Quine.
Więc zobaczmy co main()
robi:
printf(s,34,s,34);
34 to kod ASCII dla znaku "
(cudzysłów), więc to jest takie samo jak:
printf(s, '"', s, '"');
pierwszy argument printf(3)
to ciąg formatu. Ciąg przekazywane jest:
"char *s = %c%s%c; main(){printf(s,34,s,34);}"
Więc printf(3)
wyjście będzie dokładnie to, ale należy zwrócić uwagę na %c
, %s
i %c
specyfikatory formatu, które instruują printf(3)
wydrukować znak, po którym następuje ciąg znaków, a następnie przez innego bohatera, który miejsce, które są odpowiednio 2., 3. i 4. argumentem.
Znaki, jak widzieliśmy, są zarówno "
, jak i ciąg znaków ponownie s
(ten sam ciąg). Więc wyjście programu jest:
char *s = "X"; main(){printf(s,34,s,34);}
Gdzie X
jest ciąg s
w programie. Więc otrzymujemy to jako wyjście:
char *s = "char *s = %c%s%c; main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}
Co, co ciekawe, jest źródłem samego programu.
Czy wiesz, co robi 'printf'? Czy potrafisz ustalić, co 'printf (" char * s =% c% s% c; main() {printf (s, 34, s, 34);} ", 34," char * s =% c% s% c; main() {printf (s, 34, s, 34);} ", 34)' drukuje, biorąc pod uwagę, że 34 to kod ASCII dla '' ' – immibis
Teraz to jest oficjalne - strasznie brakuje mi umiejętności analitycznych – Malina
Wiem co to jest 34 i co printf robi .. to tylko semantycznie myli mnie – Malina