Probleme avec structure comprenant un tableau de char

Résolu
GUIGUI35400 Messages postés 16 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 21 décembre 2008 - 24 janv. 2006 à 16:58
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 24 janv. 2006 à 20:47
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 janv. 2006 à 18:03
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
3
MrdJack Messages postés 146 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 8 mars 2008 2
24 janv. 2006 à 18:13
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



@+
3
MrdJack Messages postés 146 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 8 mars 2008 2
24 janv. 2006 à 20:16
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...



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

sinon q1.q = "question ?";
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
GUIGUI35400 Messages postés 16 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 21 décembre 2008
24 janv. 2006 à 18:09
Merci ymca2003 et Zootella !!!

Vous me rendez un super service.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 janv. 2006 à 18:55
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 janv. 2006 à 20:47
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++
0
Rejoignez-nous