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.

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 .

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]);
Je ne comprends pas mon propre code .

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 .