Langage C code

katanableuxd -  
[Dal] Messages postés 6373 Statut Contributeur -
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 18 Statut Membre
 
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 6373 Statut Contributeur 1 106
 
@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 18 Statut Membre > [Dal] Messages postés 6373 Statut Contributeur
 
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 18 Statut Membre > leBayesien Messages postés 18 Statut Membre
 
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 6373 Statut Contributeur 1 106 > leBayesien Messages postés 18 Statut Membre
 
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 18 Statut Membre > [Dal] Messages postés 6373 Statut Contributeur
 
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