Mots dans variable
Résolu
fffd
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,
je suis débutant en C et je voudrais savoir comment déclarer une variable avec des mots dedans
genre
nom = "dupond";
merci d'avance
je suis débutant en C et je voudrais savoir comment déclarer une variable avec des mots dedans
genre
nom = "dupond";
merci d'avance
A voir également:
- Mots dans variable
- Mots de passe enregistrés - Guide
- Générateur de mots - Télécharger - Sécurité
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Ordi mots - Télécharger - Jeux vidéo
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
2 réponses
Si la chaîne doit rester constante (n'a pas de raison d'être modifiée) :
Sinon :
Par contre attention. Tu vas sans doute voir par la suite ce que sont des pointeurs en C. C'est implicitement ce que tu utilises ici car il n'y a pas de type "string" en C.
Le fait d'utiliser des pointeurs entraîne quelque subtilités, et donc un "char *" ne se manipule pas aussi simplement que si tu manipulais par exemple un int.
Par exemple, si tu veux copier mot1 dans mot2, il faut t'assurer que mot2 a été au préalable alloué (avec malloc) avant de copier mot1 dans mot2 (par exemple avec strcpy). Si tu écrit mot1 = mot2, tu ne recopies pas la chaîne, c'est simplement que mot1 désigne la même zone mémoire que mot2.
En fait la notation "truc *" désigne une adresse qui pointe sur un truc. En l'occurrence à l'adresse "mot" se trouve un caractère (la lettre 'd'), d'où la notation char *. En C écrire mot[i] consiste à regarder le caractère placé i cases de taille char après l'adresse mot. Ainsi on mot[i] = *(mot + i). C'est d'ailleurs pour ça qu'en C on compte à partir de 0. Ainsi dans un mot de n lettres, mot[0] désigne la 1ère lettre, mot[1] la seconde etc... mot[n-1] la dernière lettre.
Les fonctions du genre strcpy et strcmp partent du principe qu'à la position "n" il y a le caractère '\0' au bout de la chaîne, ce qui évite d'avoir à passer cette valeur n en paramètre. Quand on écrit :
char * mot = "dupond";
... implicitement, mot stocke l'adresse d'une chaîne constante contenant 'd','u','p','o','n','d','\0'.
Bonne chance
const char * mot = "dupond";
Sinon :
char * mot = "dupond";
Par contre attention. Tu vas sans doute voir par la suite ce que sont des pointeurs en C. C'est implicitement ce que tu utilises ici car il n'y a pas de type "string" en C.
Le fait d'utiliser des pointeurs entraîne quelque subtilités, et donc un "char *" ne se manipule pas aussi simplement que si tu manipulais par exemple un int.
Par exemple, si tu veux copier mot1 dans mot2, il faut t'assurer que mot2 a été au préalable alloué (avec malloc) avant de copier mot1 dans mot2 (par exemple avec strcpy). Si tu écrit mot1 = mot2, tu ne recopies pas la chaîne, c'est simplement que mot1 désigne la même zone mémoire que mot2.
En fait la notation "truc *" désigne une adresse qui pointe sur un truc. En l'occurrence à l'adresse "mot" se trouve un caractère (la lettre 'd'), d'où la notation char *. En C écrire mot[i] consiste à regarder le caractère placé i cases de taille char après l'adresse mot. Ainsi on mot[i] = *(mot + i). C'est d'ailleurs pour ça qu'en C on compte à partir de 0. Ainsi dans un mot de n lettres, mot[0] désigne la 1ère lettre, mot[1] la seconde etc... mot[n-1] la dernière lettre.
Les fonctions du genre strcpy et strcmp partent du principe qu'à la position "n" il y a le caractère '\0' au bout de la chaîne, ce qui évite d'avoir à passer cette valeur n en paramètre. Quand on écrit :
char * mot = "dupond";
... implicitement, mot stocke l'adresse d'une chaîne constante contenant 'd','u','p','o','n','d','\0'.
Bonne chance
Non. const ce n'est pas une vraie constante. Techniquement, il s'agit d'une variable en lecture seule. En C89/90, il est impossible de mettre une variable de type const unsigned dans un tableau statique comme tu l'as fait dans ton code. Si tu actives les bons flags, gcc doit te signaler que c'est interdit.
En revanche, en C99, c'est tout à fait possible via le mécanisme des VLAs.
Et de manière plus étendue, tu peux très bien faire : int n = 20; char mot[n]; (pas besoin de const.)
Bref, en C89/90, pour utiliser un tableau statique, il n'y a pas mille façons :
C'est : type nom[5]; ou alors avec #define.
En revanche, en C99, c'est tout à fait possible via le mécanisme des VLAs.
Et de manière plus étendue, tu peux très bien faire : int n = 20; char mot[n]; (pas besoin de const.)
Bref, en C89/90, pour utiliser un tableau statique, il n'y a pas mille façons :
C'est : type nom[5]; ou alors avec #define.