Bonjour,
J'ai créé une fonction dédiée à la saisie de chaînes de caractères en console, mais il y a quelque chose que je ne comprends pas : le sizeof dans la fonction renvoie 8 alors que la chaîne est un tableau de 16 caractères.
Par conséquent, je ne peux pas saisir plus de 7 caractères, alors que cette limite devrait être de 15.
J'ai alors modifié mon code de manière à passer le sizeof directement en paramètre, et maintenant la fonction a le comportement attendu :
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
22
23
24
25
26
27
28
29
30
31
32
33
34 #include <stdlib.h> #include <stdio.h> #include <string.h> void lire_chaine(char[], char[]); int main() { char nom[16]; do { lire_chaine(nom, "Votre nom : "); printf(">> %s\n", nom); } while (nom[0] != '*'); return 0; } void lire_chaine(char chaine[], char prompt[]) { char *p_nl = NULL; printf("-> %ld\n", sizeof chaine); /* pourquoi le sizeof est de 8 ?! */ printf(prompt); fgets(chaine, sizeof chaine, stdin); p_nl = strchr(chaine, '\n'); if (p_nl == NULL) while (getchar() != '\n'); else *p_nl = '\0'; }
Que j'appelle avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void lire_chaine(char chaine[], size_t taille, char prompt[]) { char *p_nl = NULL; printf(prompt); fgets(chaine, taille, stdin); p_nl = strchr(chaine, '\n'); if (p_nl == NULL) while (getchar() != '\n'); else *p_nl = '\0'; }
lire_chaine(nom, sizeof nom, "Votre nom : ");
Problème résolu, mais pourquoi mon premier essai ne marche pas ?
Que le sizeof se fasse dans le main ou dans lire_chaine, l'adresse de la chaîne nom est toujours la même, alors d'où vient ce 8 ?
Merci !
Partager