Affecter une valeur à une chaîne de caractère
Résolu
T-Monde99
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je débute en langage en C et c'est mon premier devoir.
Je veux affecter la valeur "katie" à kid1 et la valeur "l'incroyable Hulk a hero3", puis les afficher; comme j'ai fait pour kid1 et kid2.
#include <stdio.h> #include <string.h> int main() { char kid1[11]; char kid2[] = "Maddie"; char kid3[] = "Andrew"; char Heros1[] = "Batman"; char Heros2[] = "Spiderman"; char Heros3[25]; char "Katie", "L'incroyable Hulk"; printf("Le héros préféré de %s est : %s\n", kid2, Heros2); printf("Le héros préféré de %s est : %s\n", kid3, Heros1); printf("Le héros préféré de %s est : %s\n", kid1, Heros3); return 0; }
A voir également:
- Affecter une valeur à une chaîne de caractère
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractere vide - Guide
1 réponse
Bonjour T-Monde99,
En langage C, on peut affecter une chaîne de caractères à un tableau de char précédemment déclaré avec une taille suffisante, en utilisant la fonction standard strcpy() disponible avec l'entête <string.h>.
https://cplusplus.com/reference/cstring/strcpy/
Par exemple (exemple raccourci adapté du lien ci-dessus) :
/* strcpy example */ #include <stdio.h> #include <string.h> int main(void) { char str3[40]; strcpy(str3, "copy successful"); printf("str3 = %s\n", str3); return 0; }
Dans ton code, ta ligne 18 ne compile pas avec le message d'erreur suivant (avec gcc) :
$ gcc -Wall -Wextra 37696118.c
37696118.c: In function ‘main’:
37696118.c:18:6: error: expected identifier or ‘(’ before string constant
char "Katie", "L'incroyable Hulk";
^~~~~~~
Cette ligne ne signifie rien et n'est pas syntaxiquement correcte en C.
Bonjour
Quelques précisions à la réponse de [Dal], déjà très complète :
Bonne chance
Salut mamiemando et T-Monde99,
@mamiemando:
Comme T-Monde99 indique être très débutant (son premier devoir), il est peut être prématuré de lui parler de malloc() et de lui présenter comment déclarer un pointeur sur une chaîne littérale avec la forme
@T-Monde99:
mamiemando te montre une façon alternative de déclarer et initialiser à la déclaration des chaînes lorsqu'elles sont constantes, c'est à dire que le programme ne sera pas amené à les modifier. Avec cette forme, une erreur à l'exécution se produira certainement si, dans ton code, tu décides finalement, à l'exécution, que heros1 doit contenir "Robin" à la place de "Batman" et que tu tentes d'y stocker cette chaîne avec strcpy(). Le compilateur gcc génère aussi dans ce cas un avertissement mais pas une erreur (le programme est compilé, ce qui ne veut pas dire qu'il est "bon").
La déclaration en tant que tableau de char que tu avais faite est tout à fait valable (et correspond sans doutes à ce qu'on t'a appris à ce stade) :
Elle te permet de modifier le contenu du tableau à l'exécution, si nécessaire.
Une autre chose à bien comprendre est aussi ce que fait cette ligne. Elle est juste un moyen commode de déclarer un tableau de dimension 7 et d'initialiser sur la même ligne de code ce tableau avec les 6 char composant ce qui suit le signe égal en terminant le tableau avec le char terminateur '\0'.
Cela est exactement équivalent à :
Sauf que l'écriture est raccourcie avec la syntaxe permise par le C pour faciliter la déclaration et initialisation (toutes ces apostrophes, virgules et accolades n'étant pas pratiques à taper), le compilateur déterminant tout seul que le tableau doit avoir une taille de 7 char, et copiant les char en veillant à terminer la chaîne.
Note qu'un char est délimité par des apostrophes 'B' alors que "B", délimitée par des guillemets, représente une chaîne composée des char { 'B', '\0' }
Cela veux dire que tu peux écrire :
C'était un des nombreux problèmes dans ta ligne 18 de ton code d'origine. Outre le fait que tu ne déclarais pas d'identifiant de variable, l'absence de =, ..., ton type n'était, de toutes façons pas bon, car un (seul) char ne peut pas contenir une chaîne (usage des guillemets).