programme qui s’imprime, comment ça marche?
Je suis tombé sur un programme qui imprime lui-même sur cette site, c'est à dire qu'il imprime le code du programme.
Code du programme:
#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;
}
Et de l'explication donnée est:
Les deux principaux astuces sont ici à l'aide d'une chaîne avec un intégré à %s
rédacteur de devis afin de permettre la chaîne de contenir lui-même lors de l'impression, et à
utiliser le %c spécificateur de format afin de permettre l'impression des caractères spéciaux
comme les retours à la ligne, qui ne pourraient pas autrement être inclus dans le résultat
chaîne de caractères.
Je n'ai pas de comprendre comment le programme fonctionne. J'ai mentionné les lignes que j'ai besoin d'explications sur la façon dont ils fonctionnent et ce qu'ils sont en train de faire. Veuillez expliquer.
source d'informationauteur SpeedBirdNine
Vous devez vous connecter pour publier un commentaire.
Il est un pointeur de char nom de "programme" qui est utilisée pour stocker la chaîne et %c et %s sont les spécificateurs de format pour l'omble chevalier et de la chaîne des arguments respectivement.
fonction printf est en cours d'impression sortie de la console, de 10 ici est le code ASCII pour le SAUT de ligne et 34"
printf paramètres de
Printf affiche la chaîne de caractères donnée comme premier argument (dans ce cas la chaîne dans
*program
) en substituant les autres arguments où vous avez un %s ou %c%s signifie que l'arguement est une chaîne de caractères, %c est un personnage.
Comme le note le dit, il utilise %s pour imprimer une copie du programme de la chaîne à l'intérieur du programme à la chaîne, ce qui rend une copie, et utilise le %c pour imprimer les caractères 10 (nouvelle ligne) et 34
"
Pour une meilleure compréhension, la variable
program
aurait pu être écrit comme ceci:L'idée est, que vous exécutez le programme, le compiler, exécuter que programme et ainsi de suite. Mais cela ne peut été fait avec %les valeurs de c 10 pour le saut de ligne et 34 pour le guillemet double.
Cela peut être fait en utilisant la manipulation de Fichiers. Enregistrer le programme avec n'importe quel nom et de mettre ce nom dans l'open directory dans fopen commande.
Comme mon nom du programme est hello.cpp.
C'est le programme suivant