Créer plusieurs structures non définies au début
Fermé
JeanCri
-
11 déc. 2013 à 13:17
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 11 déc. 2013 à 14:32
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 11 déc. 2013 à 14:32
A voir également:
- Créer plusieurs structures non définies au début
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Créer un groupe whatsapp - Guide
- Créer un compte instagram sur google - Guide
- Créer une adresse hotmail - Guide
4 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 11/12/2013 à 14:37
Modifié par [Dal] le 11/12/2013 à 14:37
Bonjour,
Si on fait du c99, on peut parfaitement passer une variable à la déclaration d'un tableau.
Ce code est licite, compile et s'exécute correctement avec gcc compilé avec l'option
Mais il faut être conscient que l'on fait du c99.
Dal
N.B. : j'ai renommé "ASK" en "ask", car les capitales sont habituellement utilisées en C pour des #define, et non pour des variables, afin que le code ne soit pas trompeur.
Si on fait du c99, on peut parfaitement passer une variable à la déclaration d'un tableau.
Ce code est licite, compile et s'exécute correctement avec gcc compilé avec l'option
-std=c99:
#include <stdio.h> #include <string.h> struct people { int id; char peoplefound[10]; }; int main(void) { int ask = 2000; struct people taille[ask]; for (int n = 0; n < ask; n++) { taille[n].id = n; strcpy(taille[n].peoplefound, "toto"); printf("nom : %s\ttaille : %d\n", taille[n].peoplefound, taille[n].id); } return 0; }
Mais il faut être conscient que l'on fait du c99.
Dal
N.B. : j'ai renommé "ASK" en "ask", car les capitales sont habituellement utilisées en C pour des #define, et non pour des variables, afin que le code ne soit pas trompeur.
Bonjour JeanCri,
C'est étrange, pourriez-vous nous montrer votre boucle "for" ainsi que l'attribution des valeurs de chaque bloc contenant "id" ?
Pourriez-vous également nous montrer le message d'erreur lorsque ça plante ?
Par mon expérience, si vous codez en C je vous conseille d'utiliser des listes chainées afin d'avoir un conteneur modulable.
Cordialement.
C'est étrange, pourriez-vous nous montrer votre boucle "for" ainsi que l'attribution des valeurs de chaque bloc contenant "id" ?
Pourriez-vous également nous montrer le message d'erreur lorsque ça plante ?
Par mon expérience, si vous codez en C je vous conseille d'utiliser des listes chainées afin d'avoir un conteneur modulable.
Cordialement.
Utilisateur anonyme
11 déc. 2013 à 13:48
11 déc. 2013 à 13:48
salut,
tu alloues de cette manière :
bon déjà je ne me rappelais pas qu'il fallait préciser le struct, pour moi
Bon sinon ton allocation n'est pas suffisante de mon point de vu, je pense qu'il faut aussi allouer chaque ligne tu tableau, soit faire :
j'ai un gros doute vis à vis de l'adresse, mais le principe est là : tu alloues un tableau de taille définie mais tu n'alloues pas chaque case du tableau.
si nécessaire je pourrai voir pour compiler un code.
naga
tu alloues de cette manière :
struct people taille[ASK];
bon déjà je ne me rappelais pas qu'il fallait préciser le struct, pour moi
people taille[ASK];suffit, mais à vérifier.
Bon sinon ton allocation n'est pas suffisante de mon point de vu, je pense qu'il faut aussi allouer chaque ligne tu tableau, soit faire :
int i = 0;
while( i < ASK )
{
&taille[i] = malloc(sizeof(people));
i++;
}
j'ai un gros doute vis à vis de l'adresse, mais le principe est là : tu alloues un tableau de taille définie mais tu n'alloues pas chaque case du tableau.
si nécessaire je pourrai voir pour compiler un code.
naga
première chose, le struct est nécessaire ^^.
Bon sinon j'ai un peu changé ton tableau, et ce code fonctionne sans sourciller :
naga
Bon sinon j'ai un peu changé ton tableau, et ce code fonctionne sans sourciller :
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct people
{
int id;
char peoplefound[10];
};
#define ASK 70
int main(int argc, char *argv[]) {
struct people * taille[ASK];
int i = 0;
while(i<ASK)
{
taille[i] = (struct people*) malloc(sizeof(struct people));
taille[i]->id = i;
strcpy(taille[i]->peoplefound,"joueur");
i++;
}
i = 0;
while(i<ASK)
{
printf("%d:%s\n",taille[i]->id,taille[i]->peoplefound);
i++;
}
i = 0;
while(i<ASK)
{
free(taille[i]);
i++;
}
//free(taille);
system("PAUSE");
return 0;
}
naga
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
11 déc. 2013 à 14:23
11 déc. 2013 à 14:23
Houlà !!
Attention, "struct people taille[ASK]; " déclare un tableau statique. C'est à dire que ASK doit être connu à la compilation, ou passé en argument à la fonction qui le déclare :
et encore ce dernier est à vérifier.
L'idéal pour faire des tableau dynamique, c'est de passer par les pointeurs, un peu comme naga a essayé de le faire, mais de la mauvaise façon. C'est plutôt :
Une liste chainée est aussi une bonne solution.
Attention, "struct people taille[ASK]; " déclare un tableau statique. C'est à dire que ASK doit être connu à la compilation, ou passé en argument à la fonction qui le déclare :
void fct(int ASK) { struct people taille[ASK]; }
et encore ce dernier est à vérifier.
L'idéal pour faire des tableau dynamique, c'est de passer par les pointeurs, un peu comme naga a essayé de le faire, mais de la mauvaise façon. C'est plutôt :
struct people *taille; taille=malloc(ASK*sizeof(people));// on suppose ASK déjà renseigné par l'utilisateur.
Une liste chainée est aussi une bonne solution.