Bonjour, une petite question relative à un écrasement et je n'arrive pas à trouver d'où cela vient.

J'essaie d'imprimer exactement un entier sur 4 caractères, cela semble fonctionner mais le champ qui suit dans la structure se retrouve écrasé.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
struct s
{
    char code[4];
    char utilisateur[12];
} s;
main(int argc, char **argv)
{
 
    int val=3456;
    memset(s.utilisateur, ' ', sizeof(s.utilisateur));
    (void)strcpy(s.utilisateur, "123456");
    (void)printf("before %s\n", s.utilisateur);
    sprintf(s.code, "%4.4d\n", val);
    printf("after %s\n", s.utilisateur);
    printf("after %x\n", s.utilisateur[0]);
    printf("after %x\n", s.utilisateur[1]);
    printf("after %x\n", s.utilisateur[2]);
}
Et dans le résultat de sortie, on constate que le champ utilisateur est écrasé :-(

before 123456
after

after a
after 0
after 33
Je soupçonne fortement le sprintf de s'être un peu étalé mais quelle est la bonne syntaxe ?

Merci de vos lumières.