Mots dans variable
Résolu
fffd
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- Mots dans variable
- Où sont stockés les mots de passe sur android - Guide
- Générateur de mots - Télécharger - Sécurité
- Qui est albot mots entre amis - Forum Jeux vidéo
- Ordi mots - Télécharger - Jeux vidéo
- Mots entre amis messenger solution ✓ - Forum jeux en ligne
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
char mot[tailledemot]="";
ou bien char *mot;
ou bien char *mot;
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.