Bonjour tout le monde!
Je suis en train d'étudier un cours de sécurité et je vois du printf partout.
Alors j'ai commencé à m'interesser à cette fonction!
Ma première question concernant printf est :
Pourquoi ceci est accepté par printf:
Le compilateur va bien produire une erreur qui dit que printf a trop peu d'arguments mais ça passe et ça s'exécute bien sur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("%x%x%x%x");
Donc la question est pourquoi les développeurs de printf ont décidé qu'on pouvait utiliser plus de formateurs dans formats string que d'arguments donné à printf?
Ma deuxième question porte sur l'implémentation, je vois pas comment printf peut accéder à des arguments qui n'existent pas...
Une petite dernière question sur printf.
Je ne comprends pas mon propre code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 char x[10]; x[0] = '\x00'; x[1] = '\x01'; x[2] = '\x02'; x[3] = '\x03'; printf("%d\n", x[0]); printf("%d\n", x[1]); printf("%d\n", x[2]); printf("%d\n", x[3]);.
Du moins je suis surpris de l'output des printf.
Ca me sort
0
1
2
3
Ce que je ne comprends pas. Pour moi ça devrait juste sortir un truc farfelu c'est à dire pour le premier quand je printf x[0] il me sort 0 et pour moi il devrait prendre les 32 bits en mémoires que j'ai écrit, c'est à dire
'\x00''\x01''\x02''\x03' ce qui devrait être égal selon l'endianess
0000 0001 0010 0011
ou
1100 0100 1000 0000
ce qui devrait valoir en décimale
291
ou
50304
Je ne suis pas tout à fait sur de ça mais bon certainement pas 0.
Voilà si quelqu'un pouvait me donner quelques informations sur toutes ces petites questions ça me ferait vraiment plaisir!
Bonne soirée à vous.
Partager