Ajouter une valeur à un tableau en C
prypiat_child
Messages postés
1344
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Tout est dans le titre... Je dois écrire une fonction permettant d'ajouter un élément à la fin d'un tableau, mais qui prend en paramètres uniquement le tableau en question, et l'élément à ajouter. (C'est imposé)
j'ai déjà réalloué la mémoire pour "agrandir" le tableau, mais maintenant je ne parviens pas à ajouter un élément à la fin du tableau ! je ne connais pas sa longueur d'origine...
Tout est dans le titre... Je dois écrire une fonction permettant d'ajouter un élément à la fin d'un tableau, mais qui prend en paramètres uniquement le tableau en question, et l'élément à ajouter. (C'est imposé)
j'ai déjà réalloué la mémoire pour "agrandir" le tableau, mais maintenant je ne parviens pas à ajouter un élément à la fin du tableau ! je ne connais pas sa longueur d'origine...
A voir également:
- Inserer un element dans un tableau en c
- Tableau word - Guide
- Insérer vidéo dans powerpoint - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
12 réponses
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'
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
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.
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
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.
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.
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."
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.
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;
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.