Quelqu'un peut-il m'expliquer quelle est la différence entre ces lignes de code
char *p = "String";
char p2[] = "String";
char p3[7] = "String";
Dans quel cas dois-je utiliser chacun des éléments ci-dessus ?
Quelqu'un peut-il m'expliquer quelle est la différence entre ces lignes de code
char *p = "String";
char p2[] = "String";
char p3[7] = "String";
Dans quel cas dois-je utiliser chacun des éléments ci-dessus ?
Ce lien devrait satisfaire votre curiosité.
En gros (en oubliant votre troisième exemple qui est mauvais), la différence entre 1 et 2 est que 1 alloue de l'espace pour un pointeur vers le tableau.
Mais dans le code, vous pouvez les manipuler comme des pointeurs tout de même - seule chose, vous ne pouvez pas réallouer le second.
Les gars, avant de mettre en signet le lien que fge a posté, sachez que le site web de la FAQ a été mis à jour comme suit c-faq.com et le lien spécifique posté à ce sujet c-faq.com/aryptr (2.1,2.2) mais sans changements. Juste au cas où.
Les chaînes de caractères en C sont représentées comme des tableaux de caractères.
char *p = "String";
Vous déclarez un pointeur qui pointe vers une chaîne de caractères stockée quelque part dans votre programme (la modification de cette chaîne est un comportement non défini) selon le langage de programmation C 2 ed.
char p2[] = "String";
Vous déclarez un tableau de chars initialisé avec la chaîne "String" en laissant au compilateur le soin de compter la taille du tableau.
char p3[5] = "String";
Vous déclarez un tableau de taille 5 et l'initialisez avec "String". C'est une erreur car "String" ne tient pas dans 5 éléments.
char p3[7] = "String";
est la déclaration correcte (' \0 ' est le caractère de fin de chaîne de caractères c).
Vous ne devriez pas utiliser le troisième parce qu'il est faux. "String" prend 7 octets, pas 5.
Le premier est un pointeur (il peut être réaffecté à une adresse différente), les deux autres sont déclarés comme des tableaux, et ne peuvent pas être réaffectés à des emplacements mémoire différents (mais leur contenu peut changer, utilisez la fonction const
pour éviter cela).
char p3[5] = "String";
bien que dangereux, ce n'est pas faux et c'est valable en C (mais pas en C++)
Il s'agit d'une définition strictement conforme pour un objet. Un programme strictement conforme n'est pas "mauvais" en termes de C.
char *p = "String"; means pointer to a string type variable.
char p3[5] = "String"
; signifie que vous prédéfinissez la taille du tableau pour qu'il ne comprenne pas plus de 5 éléments. Notez que, pour les chaînes de caractères, le caractère nul " \0 "Donc, cette déclaration donnerait une erreur puisque le nombre d'éléments est de 7, donc il devrait être :
char p3[7]= "String";
char p3[5] = "String";
Celui-ci ne peut pas être utilisé, car le char n'a qu'un seul symbole et on ne peut pas l'écrire comme ça.
char p2[] = "String";
C'est la déclaration habituelle des chaînes de caractères, dans mon cas, je l'utilise dans la plupart des cas.
char *p = "String";
Il s'agit d'un pointeur ou quelque chose comme ça, je ne sais pas comment ça s'appelle en anglais, utilisé principalement pour travailler avec des classes.
De même, pour les tableaux de chaînes de caractères, vous pouvez utiliser des tableaux à deux dimensions ou des chars.
EX :
char[10][];
char[1] = "string"; // and so on
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
30 votes
Le dernier est un dépassement de tampon, donc c'est bien.
3 votes
Votre troisième exemple devrait être
p3[6]
: vous devez tenir compte du dernier 022 votes
@fge : a besoin de 7 en fait.
1 votes
@Dan erreur de compilation, plutôt
11 votes
Le troisième exemple est édité
0 votes
Aussi : stackoverflow.com/questions/1880573/ stackoverflow.com/questions/3268292/ stackoverflow.com/questions/3862842/