Problème d'allocation en langage C
Fermé
clemou01
-
30 nov. 2010 à 22:20
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 déc. 2010 à 08:45
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 déc. 2010 à 08:45
A voir également:
- Problème d'allocation en langage C
- Langage ascii - Guide
- Débuter langage batch windows - Guide
- Langage binaire - Guide
- Taille d'unité d'allocation exfat - Forum logiciel systeme
- Symboles langage sms - Forum Samsung
4 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 836
30 nov. 2010 à 22:36
30 nov. 2010 à 22:36
Bonjour,
Pourquoi "problème d'allocation" ?
Dans un char rrace, c'est pas possible. Un char représente un caractère et un seul. Il faut donc un ensemble de caractère pour contenir "Archer" ou "Druide".
Pour ma part, je te propose un tableau.
Par exemple, char *trace[]={"Archer", "Druide"};
Ensuite, trace[race-1] contiendra la réponse que vous souhaitez.
Si vous voulez vraiment un simple char *rrace ou char rrace[MAX], tu peux utiliser strcpy.
Pourquoi "problème d'allocation" ?
Dans un char rrace, c'est pas possible. Un char représente un caractère et un seul. Il faut donc un ensemble de caractère pour contenir "Archer" ou "Druide".
Pour ma part, je te propose un tableau.
Par exemple, char *trace[]={"Archer", "Druide"};
Ensuite, trace[race-1] contiendra la réponse que vous souhaitez.
Si vous voulez vraiment un simple char *rrace ou char rrace[MAX], tu peux utiliser strcpy.
Doctor C
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
398
Modifié par Doctor C le 30/11/2010 à 22:41
Modifié par Doctor C le 30/11/2010 à 22:41
Si je comprend bien, tu pourrais te faire un tableau de correspondance.
Mon C est assez, je m'excuse si j'ai fait des erreurs.
char races[2][10];
races[0] = {'A','r','c','h','e','r',' ',' ',' ',' '}
races[1] = {'D','r','u','i','d','e',' ',' ',' ',' '}
Une fois que tu as ce tableau, races[race-1] te retourne le tableau de char.
Désolé, il faut que je me sauve mais c'est une piste.
Salut et bonne chance!
Echo "Lima Mike Alfa";
Mon C est assez, je m'excuse si j'ai fait des erreurs.
char races[2][10];
races[0] = {'A','r','c','h','e','r',' ',' ',' ',' '}
races[1] = {'D','r','u','i','d','e',' ',' ',' ',' '}
Une fois que tu as ce tableau, races[race-1] te retourne le tableau de char.
Désolé, il faut que je me sauve mais c'est une piste.
Salut et bonne chance!
Echo "Lima Mike Alfa";
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 836
Modifié par fiddy le 30/11/2010 à 23:05
Modifié par fiddy le 30/11/2010 à 23:05
Une fois de plus, je suis plus rapide ;-))).
Par contre, le tableau de pointeurs est moins lourd en mémoire et écrire "archer" au lieu de 'a', 'r','c' est moins pratique. Mais, je pense qu'effectivement l'idée du tableau 2D est la meilleure.
Par contre, le tableau de pointeurs est moins lourd en mémoire et écrire "archer" au lieu de 'a', 'r','c' est moins pratique. Mais, je pense qu'effectivement l'idée du tableau 2D est la meilleure.
si j' ai bien compris compris tu reflechit pas de la bonne facon pas besoin de transformer l'int en char mais juste une condition et en fonction tu remplis ta variable.
ex ;
int lec;
char buff[20];
char *race;
lec = read(0, buff, 20);
buff[lec - 1] = '\0';
race = malloc(strlen(buff) * sizeof(*race));
if (strcmp(buff, "1") == 0)
race = "druide";
else if (strcmp(buff, "2") == 0)
race = "archer";
Bon moi j'ai fait un read au lieu de scanf mais sa marche pareille
Sinon apres je te conseil d'utiliser les pointeur sur fonction pour eviter plein de else if.
J'espere t'avoir aider.
Salut
ex ;
int lec;
char buff[20];
char *race;
lec = read(0, buff, 20);
buff[lec - 1] = '\0';
race = malloc(strlen(buff) * sizeof(*race));
if (strcmp(buff, "1") == 0)
race = "druide";
else if (strcmp(buff, "2") == 0)
race = "archer";
Bon moi j'ai fait un read au lieu de scanf mais sa marche pareille
Sinon apres je te conseil d'utiliser les pointeur sur fonction pour eviter plein de else if.
J'espere t'avoir aider.
Salut
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 836
1 déc. 2010 à 08:45
1 déc. 2010 à 08:45
Bon moi j'ai fait un read au lieu de scanf mais sa marche pareille
Sauf que read est Posix et que scanf est complètement standard. Donc, c'est bien mieux d'utiliser scanf pour ne pas perdre en portabilité.
race = malloc(strlen(buff) * sizeof(*race));
Tu n'alloues pas la bonne quantité de mémoire. Il faut allouer strlen(buff)+1 pour stocker le caractère terminal.
if (strcmp(buff, "1") == 0)
Attention au \n qui sera stocké avec la fonction read. Il faut donc soit le virer avec strchr soit comparer avec "1\n", soit utiliser scanf...
race = "druide";
Horreur ^^. Tu perds l'allocation mémoire faite avec malloc. Ici tu dis que race pointe vers une zone comprenant "druide" en mémoire. Il faut utiliser strcpy pour remplir la zone allouée avec malloc. En C, on ne copie pas une chaîne de caractère avec l'opérateur =.
Sinon apres je te conseil d'utiliser les pointeur sur fonction pour eviter plein de else if.
Je ne vois pas en quoi un pointeur sur fonction va arrancher les choses. Un simple tableau de pointeur fera amplement l'affaire.
Cdlt,
Sauf que read est Posix et que scanf est complètement standard. Donc, c'est bien mieux d'utiliser scanf pour ne pas perdre en portabilité.
race = malloc(strlen(buff) * sizeof(*race));
Tu n'alloues pas la bonne quantité de mémoire. Il faut allouer strlen(buff)+1 pour stocker le caractère terminal.
if (strcmp(buff, "1") == 0)
Attention au \n qui sera stocké avec la fonction read. Il faut donc soit le virer avec strchr soit comparer avec "1\n", soit utiliser scanf...
race = "druide";
Horreur ^^. Tu perds l'allocation mémoire faite avec malloc. Ici tu dis que race pointe vers une zone comprenant "druide" en mémoire. Il faut utiliser strcpy pour remplir la zone allouée avec malloc. En C, on ne copie pas une chaîne de caractère avec l'opérateur =.
Sinon apres je te conseil d'utiliser les pointeur sur fonction pour eviter plein de else if.
Je ne vois pas en quoi un pointeur sur fonction va arrancher les choses. Un simple tableau de pointeur fera amplement l'affaire.
Cdlt,