Langage C code

Signaler
-
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
-
Bonjour,
Je me demander que était la ligne de code pour créer une boites capable de stocker plusieurs caractère (type lettre) en langage C
Merci d'avance

1 réponse

Messages postés
17
Date d'inscription
mercredi 18 novembre 2020
Statut
Membre
Dernière intervention
3 juin 2021

Bonjour , en langage C pour stocker plusieurs caractéres tu dois obligatoirement passer par un tableau de char.

Exemple :
Si tu veux stocker un seul caractére , tu fais

char maLettre = "a";

Pour stocker plusieurs caractéres comme j'ai dit tu passes par un tableau par exemple pour stocker 50 caractéres.


char Tableau[50];

pour remplir ton tableau tu peux écrire

Tableau = "Ma chaine";

à condition que ta chaîne ne depasse pas 50 caractéres dans cette exemple.
tu peux changer la chaine comme cela.

Tableau = "Mon autre chaine";


Ou bien directement sans préciser la taille du tableau
avec

char Tableau[] ="Ma chaine";

Mais la , la taille du tableau sera fixe , et si tu veux modifier la chaine , tu peux le faire a condition de mettre une chaine plus petite que "Ma chaine" , tu peux mettre "chaine" , mais pas un truc comme "Ma grosse et longue chaine " , retiens seulement que les tableaux ont une taille fixe dés que tu les construit.

En espérant avoir répondu a ta question , bonne chance ^^
Messages postés
17
Date d'inscription
mercredi 18 novembre 2020
Statut
Membre
Dernière intervention
3 juin 2021
>
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021

Salut , merci de ta réponse.
Effectivement , j'ai testé avec un compilateur en ligne.
Le code suivant.


int main()
{
char Tab[50] = "ma chaine";
printf("chaine : %s",Tab);
Tab = "ma nouvelle chaine";
printf("Nouvelle chaine : %s",Tab);
return 0;
}

Et effectivement il me met une erreur quand je veux changer la valeur par "ma nouvelle chaine".
ça fait longtemps que j'avais pas refait du C , et dans mes souvenir , je pensais avoir trouvé la réponse :(

Bon , moralité faudrait penser a pratiquer le langage python si vous galérer en C ;)
Messages postés
17
Date d'inscription
mercredi 18 novembre 2020
Statut
Membre
Dernière intervention
3 juin 2021
>
Messages postés
17
Date d'inscription
mercredi 18 novembre 2020
Statut
Membre
Dernière intervention
3 juin 2021

Avec le pointeur de char et sans utiliser strcpy ,
cela peut donner un code comme cela et ça résout l'erreur du coup

#include <stdio.h>

int main()
{
char* chaine = "ma chaine";
printf("chaine : %s \n",chaine);
chaine = "ma nouvelle chaine";
printf("Nouvelle chaine : %s \n",chaine);
return 0;
}
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937 >
Messages postés
17
Date d'inscription
mercredi 18 novembre 2020
Statut
Membre
Dernière intervention
3 juin 2021

Oui, ceci affecte un pointeur vers une chaîne littérale, comme indiqué précédemment, mais la chaîne pointée n'est pas modifiable (une tentative de modification donnerait un comportement indéterminé).
Messages postés
17
Date d'inscription
mercredi 18 novembre 2020
Statut
Membre
Dernière intervention
3 juin 2021
>
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021

Je n'ai pas d'erreur pourtant , quand je teste le code, cela m'affiche bien le contenu que je souhaites dans les 2 appels de printf.
Et qu'entends-tu par "comportement indéterminé" ? qu'est-ce qui ce passe avec ce genre de pratique ?
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937 >
Messages postés
17
Date d'inscription
mercredi 18 novembre 2020
Statut
Membre
Dernière intervention
3 juin 2021

Ton code est valide car il ne modifie pas la chaîne littérale, il se contente de l'afficher

Si tu voulais, par exemple, avoir la possibilité de changer le premier char 'm' en 'l' pour écrire "la nouvelle chaine" à la place en faisant
chaine[0] = 'l';
il faudrait un tableau comme
char chaine[50];
pour faire cela, ou allouer de la mémoire avec malloc() à un emplacement où tu stockes ta chaîne.

Le standard du C prévoit que les chaînes du type
char * chaine = "ma nouvelle chaine";
sont des "character string literals" et le standard dit ceci à leur propos :

   A character string literal has static storage duration and type
``array of char ,'' and is initialized with the given characters. (...)

(...) If the program attempts to modify a string literal (...), the
behavior is undefined.


cela veut dire que cela peut fonctionne comme cela peut ne pas fonctionner, car le comportement dépend de l'implémentation du C.

Par exemple, gcc, sous Linux, stocke ces chaînes dans une partie de la mémoire du programme qui est en lecture seule. Une tentative d'écriture dans cette zone mémoire provoque une erreur de segmentation de mémoire à l'exécution.