Maison >développement back-end >C++ >Attribution des chaînes en c
Le texte fourni explique la différence entre l'utilisation d'un pointeur de caractère (char *string
) et d'un tableau de caractères (char string[]
) pour stocker et modifier des chaînes en C. Reformulons-le pour plus de clarté et un meilleur flux :
Les exemples de code C démontrent une distinction cruciale entre les pointeurs et les tableaux, souvent source de confusion pour les débutants. Considérez ces extraits :
Exemple 1 (Défaut de segmentation) :
<code class="language-c">#include <stdio.h> int main(void) { char *string = "Wello, world!"; // string is a pointer string[0] = 'H'; // Attempting to modify a read-only string puts(string); }</code>
Ce code entraîne une erreur de segmentation. Pourquoi? Parce que string
est déclaré comme un pointeur vers un personnage. Ce pointeur est initialisé pour pointer vers une chaîne littérale (« Eh bien, tout le monde ! »), qui est généralement stockée dans la mémoire en lecture seule. Tenter de modifier le contenu de cette mémoire morte provoque une erreur de segmentation (une violation d'accès mémoire).
Exemple 2 (Modification réussie) :
<code class="language-c">#include <stdio.h> int main(void) { char string[] = "Wello, world!"; // string is an array string[0] = 'H'; // Modifying a writable copy of the string puts(string); }</code>
Ce code imprime avec succès "Bonjour tout le monde !". Ici, string
est déclaré comme un tableau de caractères. Le compilateur alloue de l'espace sur la pile pour contenir une copie de la chaîne littérale. Cette copie est inscriptible, permettant la modification de string[0]
sans provoquer d'erreur.
La différence clé :
La différence fondamentale réside dans la façon dont la chaîne est stockée. Dans l'exemple 1, la chaîne littérale réside dans la mémoire en lecture seule et le pointeur pointe simplement vers lui. Dans l'exemple 2, une copie inscriptible du littéral de chaîne est créée et stockée dans le tableau sur la pile.
Conclusion :
Les pointeurs et les tableaux sont des types de données distincts en C. Bien qu'ils puissent sembler similaires dans certains contextes, leur comportement peut différer considérablement, en particulier lorsqu'il s'agit de chaînes littérales. Soyez toujours attentif à cette distinction pour éviter les erreurs inattendues et les défauts de segmentation. L'utilisation de tableaux de caractères pour les chaînes modifiables est généralement plus sûre que l'utilisation de pointeurs de caractères vers des chaînes littérales.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!