Probleme avec structure comprenant un tableau de char [Résolu]

Signaler
Messages postés
16
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
21 décembre 2008
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour à tous les embres de cppfrance.

J'ai un assez gros probleme avec un quizz que je comence à élaborer.

Je vous énonce le probleme :

j'ai créé une structure Question:


struct Question
{
char ra[20],rb[20],rc[20];
char q[200];
};

comme vous pouvez le voir ,il y a des tableaux de char dans ma structure.


Mon probleme maintenant est que quand je veux entrer la question qui sera posée à l'écran :


int main()
{


Question q1;
int nb,points=0;

//question 1
q1.q[200]={"question ?"};

//reponse a 1
q1.ra[20]={"reponse a"};

//reponse b 1
q1.rb[20]={"reponse b"};

//reponse c 1
q1.rc[20]={"reponse c"};

quand j'essaye de compiler ca me marque :

expected `;' befor '{' token

et sa me fait la même erreur quand j'enlève le [20] après q1.ra par exemple.

Pitiée expliquez moi ce qui ne vas pas et ce que je dois faire (ne vous contentez pas de me dire un truc qui ne m'avence a rien).

Je vous remercie beaucoup de me répondre si vous connaissez la réponse à mon probleme.

Merci de votre compréhension.

7 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
recopie du'une chaîne de caractères (c'est quand même la base du C au passage) .
strcpy(q1.q, "question ?");

ou Question q {"reponse a", "reponse b", "reponse c", "question"};> init en même tps que la déclaration
Messages postés
146
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
8 mars 2008
1
hé ben tu peux revoir les bases du c sur les chaines de caractères puisque là c'est une sacrée erreur :

tu essaye de mettre dans un emplacement memoire de 1 octet une chaine de caractère....

de plus, il existe string.h



bref :



#include <string.h>



struct Question

{

char ra[20],rb[20],rc[20];

char q[200];

};





int main()

{

Question q1;

//question 1

strncpy(q1.q, "question ?", sizeof("question ?"));



//reponse a 1

strncpy(q1.ra, "reponse a", sizeof("reponse a"));



//reponse b 1

strncpy(q1.rb, "reponse b", sizeof("reponse b"));



//reponse c 1

strncpy(q1.rc, "reponse c", sizeof("reponse c"));



printf("la question est : %s\nla reponse a est :
%s\nlareponse b est : %s\nla reponse c est : %s\n", q1.q, q1.ra, q1.rb,
q1.rc);



system("PAUSE");



return 0;

}



en gros, utilise strncpy() pour remplir tes chaines de caractères...

la methode = est non indiquée pour des chaines

n'oublie pas de renseigner la fonction sur la taille de la chaine a
copier, ca peut etre comme j'ai fait avec sizeof() ou bien tout
simplement 12,13,250 etc... mais moins pratique



@+
Messages postés
146
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
8 mars 2008
1
en reponse au dernier post :

securité strcpy


ca ne coute pas plus d'utiliser strncpy mais ca peut faire la différence niveau securité...

et je dois dire que pour un bon programmeur, il est tres important de
faire en sorte qu'un programme soit sûr, efficace et fonctionnel en
utilisant tous les moyens necessaires...



maintenant, vous en faites ce que vous voulez !!!

je ne vais pas vous faire un dessin...



@++
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
le ; c'est avant }
//question 1
q1.q[200]={"question ?";}

sinon q1.q = "question ?";
Messages postés
16
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
21 décembre 2008

Merci ymca2003 et Zootella !!!

Vous me rendez un super service.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
strncpy(q1.q, "question ?", sizeof("question ?"));
=>
autant utiliser directement strcpy
strncpy est utile pour s'assurer qu l'on va pas copier trop de caractères.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
si si ça coute plus, un compteur dans la boucle.
La sécurité s'entend pour des params externes ou chose de ce genre mais pour autant il est inutile de sacrifier les perfs si les params sont controlés en amont, par limite du champ de saisie par exemple.
On doit savoir rester critique sur tout et ne pas coder comme un automate.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++