C : cahr *tab --> allocation dynamique
Résolu/Fermé
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
-
10 mai 2005 à 12:05
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 11 mai 2005 à 21:01
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 11 mai 2005 à 21:01
14 réponses
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
10 mai 2005 à 16:19
10 mai 2005 à 16:19
Personne pour répondre ?
Pas même mister Sam3000 ou Luffy ( ou qu'il est d'ailleur ? toujours vivant ? )
Pas même mister Sam3000 ou Luffy ( ou qu'il est d'ailleur ? toujours vivant ? )
sam3000
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
144
10 mai 2005 à 16:37
10 mai 2005 à 16:37
oui, kij_82 !
chui la, je vais voir (combien tu paye l'heure :-) )
chui la, je vais voir (combien tu paye l'heure :-) )
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
10 mai 2005 à 16:48
10 mai 2005 à 16:48
Sais pas... tu m'fais quoi ? :D
sam3000
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
144
10 mai 2005 à 16:50
10 mai 2005 à 16:50
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); }
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...)
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...)
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
>
SKZ
11 mai 2005 à 21:01
11 mai 2005 à 21:01
merci en fait mon pb est résolu..
++
++
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 mai 2005 à 11:43
11 mai 2005 à 11:43
??? 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)
En tout cas, comment ca se passe pour un tableau 2D de char * ?
(je sais je suis une merde en C)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
10 mai 2005 à 17:10
10 mai 2005 à 17:10
j'te remercie bien pour le coup de pouce.
++
++
sam3000
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
144
10 mai 2005 à 17:18
10 mai 2005 à 17:18
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)
je rigole :), j'aide tous le monde. (j'espere que quelqu'un pourra m'aider quand j'en aurais besoin)
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 :-/
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 :-/
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 mai 2005 à 10:06
11 mai 2005 à 10:06
pas grave va !
m0n0-le-14r3
Messages postés
174
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
25 octobre 2005
17
11 mai 2005 à 10:07
11 mai 2005 à 10:07
tiens bonjour kij...
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 mai 2005 à 10:25
11 mai 2005 à 10:25
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... :)
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... :)
m0n0-le-14r3
Messages postés
174
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
25 octobre 2005
17
11 mai 2005 à 10:44
11 mai 2005 à 10:44
mais non ca n'avance pas ... tu n'as donc pas compris.... ct juste comme ça...just for fun !!
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 mai 2005 à 10:59
11 mai 2005 à 10:59
elle a pas de copain à mon avis...
m0n0-le-14r3
Messages postés
174
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
25 octobre 2005
17
11 mai 2005 à 11:03
11 mai 2005 à 11:03
en effet... mais plein d'amant ;)
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
>
m0n0-le-14r3
Messages postés
174
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
25 octobre 2005
11 mai 2005 à 11:08
11 mai 2005 à 11:08
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 !
je suis plein de bonnes intention maintenant !
sam3000
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
144
11 mai 2005 à 11:31
11 mai 2005 à 11:31
waw, j'apprend tous les jours avec kij :)
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 mai 2005 à 11:36
11 mai 2005 à 11:36
?? Tu es pas le Sam que je connais toi ?! Attention pas de blague..
m0n0-le-14r3
Messages postés
174
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
25 octobre 2005
17
11 mai 2005 à 11:46
11 mai 2005 à 11:46
si tu regardes son profil, je ne pense pas...
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 mai 2005 à 11:56
11 mai 2005 à 11:56
T'a vu le mien !! Ya rien de juste dedans ! Mise à par deux trois truc peut etre...
m0n0-le-14r3
Messages postés
174
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
25 octobre 2005
17
11 mai 2005 à 11:59
11 mai 2005 à 11:59
la photo par exemple est tres ressemblente !!! :P
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 mai 2005 à 12:03
11 mai 2005 à 12:03
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 ?
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 ?
10 mai 2005 à 18:53
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 !