C : cahr *tab --> allocation dynamique

Résolu
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   -  
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjours,

voilà, aujourd'hui je suis pas top en forme alors g pas trop envis de me casser la tete pdt 15 plombe sur un truc dont je ne me souvient plus, alors je m'en remet à votre expéreince : mon pb est le suivant : je voudrais créer un tableau de char * dynamiquement, pour cela, au fur et à mesure que je met des éléments dans mon tableau, je dois allouer de la place dans celui-ci pour y placer l'élément. Les éléments sont toujours des char * et on connait leur taille, comment fdaire donc ?
Le C pour moi c'est tres loin, alors si des gens peuvent m'aider, merci beaucoup :)

ps : c'est un tableau à deux entrées destiné à mémoriser les resultats de requetes.

moi je mettrais un truc du genre, mais est-ce bon ? :
char *tab = null;
int i = 0;
char *element = "ici";
int taille = 4;

for(i=0;i<4;i++){
 tab[i] = malloc((char *)taille*sizeof(char));
 tab[i] = element;
}


Est-ce que cela est correct. La je vais manger alors j'ai pas tester en fait,
merci.

++

14 réponses

kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
Personne pour répondre ?

Pas même mister Sam3000 ou Luffy ( ou qu'il est d'ailleur ? toujours vivant ? )
0
Luffy =) Messages postés 365 Date d'inscription   Statut Membre Dernière intervention   110
 
alleluia ! je suis réssucité! Prosternez-vous devant le grand LuFfY =)

nan mais en fait chuis à l'école en ce moment, et en plein dans les révisions, donc plus tropde temps à consacrer au forum...

Mais je voles volontiers à ton secours quand tu es en difficulté kij =)
sauf que là, ben Dieu m'a réssucité trop tard !
0
sam3000 Messages postés 1225 Date d'inscription   Statut Membre Dernière intervention   144
 
oui, kij_82 !
chui la, je vais voir (combien tu paye l'heure :-) )
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
Sais pas... tu m'fais quoi ? :D
0
sam3000 Messages postés 1225 Date d'inscription   Statut Membre Dernière intervention   144
 
non, c'est pas bon ça! ce que tu fais là c'est allouer des caracteres, alors que tu doit allouer des pointeurs:
#include <stdio.h>
#include <stdlib.h>

void main()
{
int i = 0;
char **tab;
char *element = "ici";
int taille = 4;

tab = (char **) malloc(taille * sizeof(char *));
for(i=0;i<taille;i++)
{
 *(tab+i) = element;
}

for(i=0;i<taille;i++)
{
 printf("%s\n",*(tab+i));
}
free(tab);
}
0
SKZ
 
T'as de la chance j'ai failli de foutre un SIGSEGV dans la gl...

Vous croyez pas que l'exercice aurait plus d'intérêt pédagogique si sizeof(element) était différent du nombre d'élément de tab ???
0
SKZ > SKZ
 
T'a déjà un tableau 2D dans cet exo.
La première dimension est le N° de chaine et la deuxième, le N° de caractère.

Si tu parle d'un char *tab[][] (un tableau 3D de caractère, soit 2D de chaînes de caractères), ben... T'alloue d'abors le nombre de colonnes (on considère que c'est la première dimension.)
Ensuite pour chaque colone col, tu alloue le pointeur
tab[col], qui correspond aux vecteurs colonnes de la matrice (chaque colonne est composé de N chaines, N peut varier avec la colonne).
Puis, pour chaque ligne de chaque colonne, il faut encore allouer tab[col][line], chaque chaine de caractère (ou, affecter une chaine récupérée quelque part, à condition d'être sûr que c'est toi qui dois la désallouer).

Pour libérer le tableau, c'est l'inverse : pour chaque ligne de chaque colonne, tu fais un free(tab[col][line]); puis pour chaque colonne un free(tab[col]); et enfin, un free(tab); pour libérer le tableau de colonnes.

Quand je parler de taille différente, l'idée est de mettre 6 chaînes de caractère dans le tableau.

Le problème est la chaîne "ici", qui a, on est d'accord, une taille de 3 carcatères, occupe un espace mémoire de 4 octets.
En effet écrire

char chaine[] = "ici";
est strictement équivalent à
char chaine[] = {'i', 'c', 'i', '\0'};

(Pour le SIGSEGV, c'est quand on déborde de la mémoire...
Un instant j'ai cru que Sam débordait...)
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857 > SKZ
 
merci en fait mon pb est résolu..

++
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
??? peu etre plus clair stp ?

En tout cas, comment ca se passe pour un tableau 2D de char * ?

(je sais je suis une merde en C)
0

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

Posez votre question
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
j'te remercie bien pour le coup de pouce.

++
0
sam3000 Messages postés 1225 Date d'inscription   Statut Membre Dernière intervention   144
 
de rien, laisse moi aider les filles maintenant!
je rigole :), j'aide tous le monde. (j'espere que quelqu'un pourra m'aider quand j'en aurais besoin)
0
SKZ
 
de rien, laisse moi aider les filles maintenant!
Kedal tu m'les laisse !!!
:-P

Pour répondre à ta citation (je m'acharne un peu sur ce post, mais en vrai je suis gentil) :
La Shoha n'avait rien d'informatique (et je suis pas juif, pour peuve je sais pas écrire Shoa...)

C'est pas très programmation, je digresse :-/
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
pas grave va !
0
m0n0-le-14r3 Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   17
 
tiens bonjour kij...
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
Bonjours,

Sympa ton message, alors cette romance, c'en est ou ? ca cavance ? dommage que tu parte cet été... enfin moi j'dit ca mais j'dit rien... :)
0
m0n0-le-14r3 Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   17
 
mais non ca n'avance pas ... tu n'as donc pas compris.... ct juste comme ça...just for fun !!
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
elle a pas de copain à mon avis...
0
m0n0-le-14r3 Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   17
 
en effet... mais plein d'amant ;)
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857 > m0n0-le-14r3 Messages postés 174 Date d'inscription   Statut Membre Dernière intervention  
 
ah ouai... (tiens tiens, fort intéressant ca... :D ) Non je palisante, je suis un homme différent maintenant !! j'ai changé.. j'ai pris plein de résolution suite à cette année et certain dérapage lors de fete trop arrosée (comme une soirée à la salle des fetes par exemple...)

je suis plein de bonnes intention maintenant !
0
sam3000 Messages postés 1225 Date d'inscription   Statut Membre Dernière intervention   144
 
waw, j'apprend tous les jours avec kij :)
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
?? Tu es pas le Sam que je connais toi ?! Attention pas de blague..
0
m0n0-le-14r3 Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   17
 
si tu regardes son profil, je ne pense pas...
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
T'a vu le mien !! Ya rien de juste dedans ! Mise à par deux trois truc peut etre...
0
m0n0-le-14r3 Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   17
 
la photo par exemple est tres ressemblente !!! :P
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
Question à Sam3000 :

Comment ca se passe pour un tableau 2D de char * ?

Je pensais faire un typedef TRUC char *t[2];
Puis faire un pointeur qui se déplace dessus à ta facon,
c'est correct ?
0