Ajouter une valeur à un tableau en C
Fermé
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
-
23 nov. 2010 à 19:28
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 nov. 2010 à 23:50
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 nov. 2010 à 23:50
A voir également:
- Inserer un element dans un tableau en c
- Comment faire un tableau - Guide
- Tableau croisé dynamique - Guide
- Insérer une vidéo dans powerpoint - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
12 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
23 nov. 2010 à 22:41
23 nov. 2010 à 22:41
Bonjour,
Tu souhaites connaître la taille d'une chaîne de caractère ?
Utilise tout simplement strlen.
Par exemple :
L'idéal serait de vérifier les valeurs de retour de malloc et de realloc. Mais, il s'agit juste d'un exemple.
Cdlt,
Tu souhaites connaître la taille d'une chaîne de caractère ?
Utilise tout simplement strlen.
Par exemple :
const char *prenom1="marie"; const char *prenom2="marie-line"; char *prenom=malloc(strlen(prenom1)+1); strcpy(prenom, prenom1); puts(prenom); realloc(prenom,strlen(prenom2)+1); strcpy(prenom, prenom2); puts(prenom); free(prenom), prenom=NULL;
L'idéal serait de vérifier les valeurs de retour de malloc et de realloc. Mais, il s'agit juste d'un exemple.
Cdlt,
je vais peut être dire une bêtise mais un "strlen" de ton tableau ne fonctionnerai pas pour connaitre sa taille?
sinon tu parcourt ton tableau en incrémentant une variable jusqu'au carractère '\0'
sinon tu parcourt ton tableau en incrémentant une variable jusqu'au carractère '\0'
Nazuras
Messages postés
62
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2011
99
23 nov. 2010 à 19:34
23 nov. 2010 à 19:34
Salut,
En C, tu es obligé de parcourir le tableau pour en connaitre sa taille.
a+
En C, tu es obligé de parcourir le tableau pour en connaitre sa taille.
a+
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
Modifié par prypiat_child le 23/11/2010 à 19:51
Modifié par prypiat_child le 23/11/2010 à 19:51
Merci d'avoir répondu rapidement...
J.K.ja : Il ne s'agit pas d'un tableau de caractères... ou ca peut être n'importe quoi comme tableau
Nazuras : Comment le parcourir sans en sortir et sans utiliser de for (vu qu'on connaît pas sa taille ?)
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
J.K.ja : Il ne s'agit pas d'un tableau de caractères... ou ca peut être n'importe quoi comme tableau
Nazuras : Comment le parcourir sans en sortir et sans utiliser de for (vu qu'on connaît pas sa taille ?)
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nazuras
Messages postés
62
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2011
99
23 nov. 2010 à 19:57
23 nov. 2010 à 19:57
Pourquoi tu ne fixes pas la taille de ton tableau ?
Même si la taille que tu va fixer sera trop grande, c'est toujours mieux.
Même si la taille que tu va fixer sera trop grande, c'est toujours mieux.
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
Modifié par prypiat_child le 23/11/2010 à 20:16
Modifié par prypiat_child le 23/11/2010 à 20:16
Il ne s'agit en réalité pas vraiment d'un tableau, mais de cela :
Et je souhaite donc ajouter un élément de type "Tab" à la fin du tableau dynamique "tabelement" qui est dans "struct EnsembleP".
Ceci, en écrivant la fonction suivante :
edit : j'aurais peut-être dû donner cette précision plus tôt^^
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
typedef struct Tab{ float element; int nboccu; }Tab; struct EnsembleP{ Tab *tabelement; int iterateur; };
Et je souhaite donc ajouter un élément de type "Tab" à la fin du tableau dynamique "tabelement" qui est dans "struct EnsembleP".
Ceci, en écrivant la fonction suivante :
ensembleAjouterElement(EnsembleP *self, float elt);
edit : j'aurais peut-être dû donner cette précision plus tôt^^
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
Salut ,
on dirait que tu veux utiliser la méthode des listes chainée ,mais je n'en suis pas sur :
https://www.commentcamarche.net/contents/114-langage-c-les-listes-chainees
on dirait que tu veux utiliser la méthode des listes chainée ,mais je n'en suis pas sur :
https://www.commentcamarche.net/contents/114-langage-c-les-listes-chainees
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
23 nov. 2010 à 20:55
23 nov. 2010 à 20:55
heu, si j'ai bien compris une liste est un genre de structure récursive ? dans ce cas c'est pas ca non...
Désolé mais je vois pas comment faire sans plus de détails...
A quoi ressemble la déclaration de la fonction?
A tu le main correspondant, si oui qu'envoi tu dans la fonction?
A quoi ressemble la déclaration de la fonction?
A tu le main correspondant, si oui qu'envoi tu dans la fonction?
Oups, j'avais raté ton post de 20h15.
Je crois comprendre que dans ton cas tu n'a que un seul EnsembleP en réalité, car tu déclare " tab* tabelement " et pas " tab tabelement[taille_du_tableau] "
Et donc ce que tu cherche serait taille_du_tableau.
En espérant ne pas me tromper.
Je crois comprendre que dans ton cas tu n'a que un seul EnsembleP en réalité, car tu déclare " tab* tabelement " et pas " tab tabelement[taille_du_tableau] "
Et donc ce que tu cherche serait taille_du_tableau.
En espérant ne pas me tromper.
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
23 nov. 2010 à 22:49
23 nov. 2010 à 22:49
Oui en gros c'est ca.... une fois que j'aurai récupéré cette taille ca sera plus simple^^
ghuysmans99
Messages postés
2496
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
340
23 nov. 2010 à 23:42
23 nov. 2010 à 23:42
A mon sens, utiliser une liste chainée c'est le plus efficace :
Ce n'est pas une structure récursive, il y a seulement à la fin de chaque maillon un pointeur vers le suivant -> si le pointeur vaut 0 (NULL), cela signifie qu'on est au bout de la liste.
typedef struct { float element; int nboccu; }Tab; typedef struct _EnsembleP { Tab tabelement; int iterateur; struct _EnsembleP *_suivant; }EnsembleP;
Ce n'est pas une structure récursive, il y a seulement à la fin de chaque maillon un pointeur vers le suivant -> si le pointeur vaut 0 (NULL), cela signifie qu'on est au bout de la liste.
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
24 nov. 2010 à 12:33
24 nov. 2010 à 12:33
non, je pense pas que je vais choisir ce genre de chose... a vrai dire le choix de la structure est un peu imposé^^
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
Modifié par prypiat_child le 24/11/2010 à 12:27
Modifié par prypiat_child le 24/11/2010 à 12:27
Je pensais, si je fais ca :
tailleSelf devrait contenir la longueur de l'ensemble self non ? et le problème serait réglé... (self étant bien entendu l'ensemble passé en paramètre)
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
typedef struct EnsembleP * Ensemble; Ensemble self; int tailleSelf = sizeof(*self)/sizeof(struct EnsembleP);
tailleSelf devrait contenir la longueur de l'ensemble self non ? et le problème serait réglé... (self étant bien entendu l'ensemble passé en paramètre)
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
24 nov. 2010 à 21:11
24 nov. 2010 à 21:11
Ca ne marchera pas.
Ta formule donnera 1. *self est de type struct EnsembleP, donc ton tailleSelf retournera 1.
Et si tu calcules simplement : sizeof(*self), ça te donnera sizeof(void*)+sizeof(int).
Comme je t'ai dit, il faut que tu passes la taille en argument ou que tu la mettes dans la structure ou alors liste chaînée. Tu ne peux pas recalculer la taille puisqu'il s'agit d'un pointeur que tu devras allouer avec malloc.
Ta formule donnera 1. *self est de type struct EnsembleP, donc ton tailleSelf retournera 1.
Et si tu calcules simplement : sizeof(*self), ça te donnera sizeof(void*)+sizeof(int).
Comme je t'ai dit, il faut que tu passes la taille en argument ou que tu la mettes dans la structure ou alors liste chaînée. Tu ne peux pas recalculer la taille puisqu'il s'agit d'un pointeur que tu devras allouer avec malloc.
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
24 nov. 2010 à 23:17
24 nov. 2010 à 23:17
Finalement j'ai décidé de mettre la taille dans la structure... je vais me débrouiller comme ca parce que sinon ca va pas être possible... merci !
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
24 nov. 2010 à 23:50
24 nov. 2010 à 23:50
Dès que tu fais ton malloc/realloc, tu mets à jour la variable taille dans ta structure. Et ça passera tout seul ;-))).
Tu peut choisir ta taille selon tes besoins, c'est toi qui doit l'imposer lorsque tu crée ton
typedef struct
{...}
EnsembleP;
Comme suit -->
typedef struct
{
float element;
int nboccu;
}Tab;
typedef struct
{
Tab tabelement[LA_TAILLE_QUE_TU_VEUT]; // et non Tab* tabelement;
int iterateur;
}EnsembleP;
typedef struct
{...}
EnsembleP;
Comme suit -->
typedef struct
{
float element;
int nboccu;
}Tab;
typedef struct
{
Tab tabelement[LA_TAILLE_QUE_TU_VEUT]; // et non Tab* tabelement;
int iterateur;
}EnsembleP;
23 nov. 2010 à 22:48
23 nov. 2010 à 23:00
Tu ne peux pas déterminer la longueur de ton tableau dans ce cas puisqu'alloué dynamiquement. Il faut tout simplement mémoriser la "variable" mise dans ton malloc. Et par conséquent, il faudra passer la taille en argument à ta fonction ou de mettre un champ supplémentaire dans ta structure.