Contrairement à Python ou JavaScript, le langage C ne possède pas un type “string” intégré. Les textes sont gérés sous forme de tableaux de caractères, ce qui change entièrement la manière de les créer, de les modifier et de les copier. Cet article t’aide à comprendre cette logique particulière.
char nom[30];) n’est pas une variable assignableUn tableau ne peut pas être affecté avec une simple instruction d’assignation.
Donc ceci est illégal :
char nom[30];
nom = "Alice"; // ❌ interdit
Pourquoi ? Parce qu’un tableau n’est pas une variable "classique", c’est un bloc mémoire fixe. On ne peut pas "remplacer" un tableau : on peut seulement écrire à l’intérieur case par case.
Les seuls moments où un tableau peut recevoir une chaîne littérale sont :
👉 lors de la déclaration + initialisation
char nom[30] = "Alice"; // ✔️ OK (initialisation, pas assignation)
👉 ou en utilisant une fonction de copie
strcpy(nom, "Alice"); // ✔️ OK
Donc : 💡 Toutes les affectations de chaînes dans un tableau déjà existant nécessitent une fonction de copie.
strcpy() ?strcpy(destination, source);
Elle copie caractère par caractère :
source,destination,\0 final.Donc :
strcpy(nom, "Alice");
Écrit réellement ceci en mémoire :
nom[0] = 'A'
nom[1] = 'l'
nom[2] = 'i'
nom[3] = 'c'
nom[4] = 'e'
nom[5] = '\0'
char*Si tu déclares ceci :
char *nom = "Alice";
Ici, tu n’as pas un tableau. Tu as un pointeur qui pointe vers une chaîne littérale stockée en mémoire en lecture seule.
Donc pour un char*, ceci est permis :
nom = "Bob"; // ✔️ valide (on change l’adresse stockée dans le pointeur)
Mais tu ne peux pas modifier le contenu de la chaîne littérale !
nom[0] = 'C'; // ⚠️ comportement indéfini → crash probable
Donc :
| Type | Peut-on faire nom = "Texte" ? |
Peut-on modifier le contenu ? |
|---|---|---|
char nom[30] (tableau) |
❌ Non | ✔️ Oui |
char *nom (pointeur) |
✔️ Oui | ❌ Non (dangereux) |
🎯 Obligatoire : utiliser une fonction de copie (strcpy, strncpy, fgets, etc.)
Parce qu’un tableau ne peut pas être affecté avec =.
char* vers un littéral :nom = "Alice";strcpy ?💡 Toujours quand tu veux mettre du texte dans un tableau de char :
char nom[30];
strcpy(nom, "Alice"); // ✔️ bon
Ou quand tu veux copier une variable string dans une autre.
Pour éviter les dépassements de mémoire :
strncpy(nom, "Alice", sizeof(nom));
nom[sizeof(nom) - 1] = '\0';
Ou mieux :
fgets(nom, sizeof(nom), stdin);