Langage C code

Fermé
katanableuxd - 27 mai 2021 à 19:20
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 28 mai 2021 à 16:38
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
A voir également:

1 réponse

leBayesien Messages postés 17 Date d'inscription mercredi 18 novembre 2020 Statut Membre Dernière intervention 12 juillet 2023
28 mai 2021 à 10:55
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 ^^
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 28 mai 2021 à 14:32
@leBayesien :

Tu écris :

char Tableau[50];

pour remplir ton tableau tu peux écrire

Tableau = "Ma chaine";


Pour "remplir" le tableau de char, une fois celui-ci déclaré, on ne fait pas comme tu le proposes. Le code ci-dessus est illégal est devrait produire une erreur de syntaxe, car Tableau est un type tableau, et la chaîne littérale est un type pointeur sur char (pointant vers une chaîne littérale constante). Tu pourrais faire cela si ta variable était un pointeur sur char et non pas un tableau de char (tu te retrouverais alors avec une chaîne littérale constante non modifiable).

Dans la situation où un tableau de char est d'abord déclaré et que l'on souhaite ensuite le "remplir", on fait
strcpy(Tableau, "Ma chaine");
, pour "remplir" la tableau de char avec une chaîne (en faisant un
#include <string.h>
pour pouvoir accéder à cette fonction standard du C).

char Tableau[] ="Ma chaine";

Cette notation est en revanche correcte, car il s'agit d'un raccourci syntaxique permis par le langage, qui, en une seule ligne, permet la déclaration du tableau et son initialisation lors de la déclaration avec la chaîne passée. Le compilateur va dimensionner tout seul le tableau pour disposer de l'espace nécessaire au nombre de char passés plus le terminateur de chaîne '\0', et y copier la chaîne.
0
leBayesien Messages postés 17 Date d'inscription mercredi 18 novembre 2020 Statut Membre Dernière intervention 12 juillet 2023 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
28 mai 2021 à 14:58
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 ;)
0
leBayesien Messages postés 17 Date d'inscription mercredi 18 novembre 2020 Statut Membre Dernière intervention 12 juillet 2023 > leBayesien Messages postés 17 Date d'inscription mercredi 18 novembre 2020 Statut Membre Dernière intervention 12 juillet 2023
28 mai 2021 à 15:18
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;
}
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > leBayesien Messages postés 17 Date d'inscription mercredi 18 novembre 2020 Statut Membre Dernière intervention 12 juillet 2023
28 mai 2021 à 15:40
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é).
0
leBayesien Messages postés 17 Date d'inscription mercredi 18 novembre 2020 Statut Membre Dernière intervention 12 juillet 2023 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
28 mai 2021 à 15:44
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 ?
0