#include "stdlib.h"
#include "stdio.h"
char ** create_table(size_t tab_size, size_t chaine_size)
{
size_t i,j;
char ** tab=malloc(tab_size*sizeof*tab);
if(tab==NULL)
{
printf("Malloc failedn");
exit(EXIT_FAILURE);
}
for(i=0;i<tab_size;i++)
{
tab[i]=malloc(chaine_size*sizeof*tab[i]);
if(tab[i]==NULL)
{
printf("Malloc failedn");
/* libérer l'espace mémoire déjà allouée jusqu'ici */
for(j=i-1;j>=0;j--) free(tab[j]);
free(tab);
exit(EXIT_FAILURE);
}
}
return tab;
}
par exemple, mais ton cahier des charges n'est pas trés précis non plus,
alors...
#include "stdlib.h"
#include "stdio.h"
char ** create_table(size_t tab_size, size_t chaine_size)
{
size_t i,j;
char ** tab=malloc(tab_size*sizeof*tab);
if(tab==NULL)
{
printf("Malloc failedn");
exit(EXIT_FAILURE);
}
for(i=0;i<tab_size;i++)
{
tab[i]=malloc(chaine_size*sizeof*tab[i]);
if(tab[i]==NULL)
{
printf("Malloc failedn");
/* libérer l'espace mémoire déjà allouée jusqu'ici */
for(j=i-1;j>=0;j--) free(tab[j]);
free(tab);
exit(EXIT_FAILURE);
}
}
return tab;
}
par exemple, mais ton cahier des charges n'est pas trés précis non plus,
alors...
#include "stdlib.h"
#include "stdio.h"
char ** create_table(size_t tab_size, size_t chaine_size)
{
size_t i,j;
char ** tab=malloc(tab_size*sizeof*tab);
if(tab==NULL)
{
printf("Malloc failedn");
exit(EXIT_FAILURE);
}
for(i=0;i<tab_size;i++)
{
tab[i]=malloc(chaine_size*sizeof*tab[i]);
if(tab[i]==NULL)
{
printf("Malloc failedn");
/* libérer l'espace mémoire déjà allouée jusqu'ici */
for(j=i-1;j>=0;j--) free(tab[j]);
free(tab);
exit(EXIT_FAILURE);
}
}
return tab;
}
par exemple, mais ton cahier des charges n'est pas trés précis non plus,
alors...
D'ailleurs cela ressemble fort a un devoir d'informatique que le posteur
aurait du faire lui-meme.
D'ailleurs cela ressemble fort a un devoir d'informatique que le posteur
aurait du faire lui-meme.
D'ailleurs cela ressemble fort a un devoir d'informatique que le posteur
aurait du faire lui-meme.
j'ai regarder sur le net quelques exemples de tableaux de chaines,
manque de pot il y a des erreurs...
donc je cherche un moyen pour créer un tableau de dimension variable
de chaines de caractères elles-mêmes de dimensions variables...
en créant, par exemple une stucture pour ce faire.
quelqu'un aurait des pistes ???
j'ai regarder sur le net quelques exemples de tableaux de chaines,
manque de pot il y a des erreurs...
donc je cherche un moyen pour créer un tableau de dimension variable
de chaines de caractères elles-mêmes de dimensions variables...
en créant, par exemple une stucture pour ce faire.
quelqu'un aurait des pistes ???
j'ai regarder sur le net quelques exemples de tableaux de chaines,
manque de pot il y a des erreurs...
donc je cherche un moyen pour créer un tableau de dimension variable
de chaines de caractères elles-mêmes de dimensions variables...
en créant, par exemple une stucture pour ce faire.
quelqu'un aurait des pistes ???
Oui, en créant une structure pour ce faire.
Comme il est probable que tu auras besoinde chaines de dimension
variable indépendament du tableau de chaines, je conseillerais
d'implémenter deux types abstraits:
- chaines de dimension variable.
- tableaux de dimensions variables (1, 2 ou plus?).
Voir par exemple:http://darcs.informatimago.com/public/common/bclib/inter faces/BcString.hhttp://darcs.informatimago.com/public/common/bclib/interfac es/BcList.h
(et implémentations dans le répèrtoire sources danshttp://darcs.inf ormatimago.com/public/common/bclib/)
Oui, en créant une structure pour ce faire.
Comme il est probable que tu auras besoinde chaines de dimension
variable indépendament du tableau de chaines, je conseillerais
d'implémenter deux types abstraits:
- chaines de dimension variable.
- tableaux de dimensions variables (1, 2 ou plus?).
Voir par exemple:http://darcs.informatimago.com/public/common/bclib/inter faces/BcString.hhttp://darcs.informatimago.com/public/common/bclib/interfac es/BcList.h
(et implémentations dans le répèrtoire sources danshttp://darcs.inf ormatimago.com/public/common/bclib/)
Oui, en créant une structure pour ce faire.
Comme il est probable que tu auras besoinde chaines de dimension
variable indépendament du tableau de chaines, je conseillerais
d'implémenter deux types abstraits:
- chaines de dimension variable.
- tableaux de dimensions variables (1, 2 ou plus?).
Voir par exemple:http://darcs.informatimago.com/public/common/bclib/inter faces/BcString.hhttp://darcs.informatimago.com/public/common/bclib/interfac es/BcList.h
(et implémentations dans le répèrtoire sources danshttp://darcs.inf ormatimago.com/public/common/bclib/)
pas glop : il faut utiliser les <> pour les headers standard.
ouais, je m'étais mis ça comme règle un jour. Sauf qu'en pratique, ça m'a
attention les size_t sont piegeux.
certes, moi qui croyais bien faire alors que j'avais mis des int... :-)
pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est plus
clair.
ouais... quand j'ai commencé le C, à chaque post que je faisais ou
pourquoi printf et exit ? return NULL est plus classique pour une fonction
oui, moi dans l'utilisation que je fais de mes programmes (je ne fais pas de
Bof : si on va faire exit, a quoi bon ?
Ben c'est plus propre non ? Si je ne l'avais pas fait un autre m'aurait dit
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable a
Quand j'ai lu le boum, j'ai sursauté et je suis devenu tout rouge. On voit
Incomplet : les tableaux de caracteres alloues ne sont pas initialises, il
aurait suffit de les allouer par calloc(chaine_size, sizeof(char))
blablabla...
Certes, mais pour un devoir de vacances gratos... et heureusement que j'ai
pas glop : il faut utiliser les <> pour les headers standard.
ouais, je m'étais mis ça comme règle un jour. Sauf qu'en pratique, ça m'a
attention les size_t sont piegeux.
certes, moi qui croyais bien faire alors que j'avais mis des int... :-)
pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est plus
clair.
ouais... quand j'ai commencé le C, à chaque post que je faisais ou
pourquoi printf et exit ? return NULL est plus classique pour une fonction
oui, moi dans l'utilisation que je fais de mes programmes (je ne fais pas de
Bof : si on va faire exit, a quoi bon ?
Ben c'est plus propre non ? Si je ne l'avais pas fait un autre m'aurait dit
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable a
Quand j'ai lu le boum, j'ai sursauté et je suis devenu tout rouge. On voit
Incomplet : les tableaux de caracteres alloues ne sont pas initialises, il
aurait suffit de les allouer par calloc(chaine_size, sizeof(char))
blablabla...
Certes, mais pour un devoir de vacances gratos... et heureusement que j'ai
pas glop : il faut utiliser les <> pour les headers standard.
ouais, je m'étais mis ça comme règle un jour. Sauf qu'en pratique, ça m'a
attention les size_t sont piegeux.
certes, moi qui croyais bien faire alors que j'avais mis des int... :-)
pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est plus
clair.
ouais... quand j'ai commencé le C, à chaque post que je faisais ou
pourquoi printf et exit ? return NULL est plus classique pour une fonction
oui, moi dans l'utilisation que je fais de mes programmes (je ne fais pas de
Bof : si on va faire exit, a quoi bon ?
Ben c'est plus propre non ? Si je ne l'avais pas fait un autre m'aurait dit
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable a
Quand j'ai lu le boum, j'ai sursauté et je suis devenu tout rouge. On voit
Incomplet : les tableaux de caracteres alloues ne sont pas initialises, il
aurait suffit de les allouer par calloc(chaine_size, sizeof(char))
blablabla...
Certes, mais pour un devoir de vacances gratos... et heureusement que j'ai
attention les size_t sont piegeux.
certes, moi qui croyais bien faire alors que j'avais mis des int... :-)pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est plus
clair.
ouais... quand j'ai commencé le C, à chaque post que je faisais ou
j'écrivais sizeof(*tab), il y un mec qui, systématiquement (un peu comme
toi ?) me faisait une réponse pour me dire que c'était inutile. Il
s'appelait ED si je me souviens bien...bon allé, je te taquine.
Emmanuel doit etre en vacances lui aussi, mais j'insiste sur la lisibilite.
pourquoi printf et exit ? return NULL est plus classique pour une
fonction
oui, moi dans l'utilisation que je fais de mes programmes (je ne fais pas
de temps réel), j'aime bien le printf qui me dit tout de suite ou ça
plante (en générale j'ajoute un __FILE__ et __LINE__)
alors mets un assert ?
Bof : si on va faire exit, a quoi bon ?
Ben c'est plus propre non ? Si je ne l'avais pas fait un autre m'aurait
dit : t'as pas libéré la mémoire, c'est pas glop !
pour retourner NULL en effet il faut liberer les trucs deja alloues qui vont
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable
a
Quand j'ai lu le boum, j'ai sursauté et je suis devenu tout rouge. On voit
l'oeil de l'expert aguérrit par de nombre revues de codes !
Eh oui !
Incomplet : les tableaux de caracteres alloues ne sont pas initialises,
il aurait suffit de les allouer par calloc(chaine_size, sizeof(char))
blablabla...
Certes, mais pour un devoir de vacances gratos... et heureusement que j'ai
pas utilisé de strncat et touti quanti ;-)
strncpy et encore pire ;-)
Donc je retiens quoi ? Pas de size_t dans les indices de boucles ?
attention les size_t sont piegeux.
certes, moi qui croyais bien faire alors que j'avais mis des int... :-)
pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est plus
clair.
ouais... quand j'ai commencé le C, à chaque post que je faisais ou
j'écrivais sizeof(*tab), il y un mec qui, systématiquement (un peu comme
toi ?) me faisait une réponse pour me dire que c'était inutile. Il
s'appelait ED si je me souviens bien...bon allé, je te taquine.
Emmanuel doit etre en vacances lui aussi, mais j'insiste sur la lisibilite.
pourquoi printf et exit ? return NULL est plus classique pour une
fonction
oui, moi dans l'utilisation que je fais de mes programmes (je ne fais pas
de temps réel), j'aime bien le printf qui me dit tout de suite ou ça
plante (en générale j'ajoute un __FILE__ et __LINE__)
alors mets un assert ?
Bof : si on va faire exit, a quoi bon ?
Ben c'est plus propre non ? Si je ne l'avais pas fait un autre m'aurait
dit : t'as pas libéré la mémoire, c'est pas glop !
pour retourner NULL en effet il faut liberer les trucs deja alloues qui vont
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable
a
Quand j'ai lu le boum, j'ai sursauté et je suis devenu tout rouge. On voit
l'oeil de l'expert aguérrit par de nombre revues de codes !
Eh oui !
Incomplet : les tableaux de caracteres alloues ne sont pas initialises,
il aurait suffit de les allouer par calloc(chaine_size, sizeof(char))
blablabla...
Certes, mais pour un devoir de vacances gratos... et heureusement que j'ai
pas utilisé de strncat et touti quanti ;-)
strncpy et encore pire ;-)
Donc je retiens quoi ? Pas de size_t dans les indices de boucles ?
attention les size_t sont piegeux.
certes, moi qui croyais bien faire alors que j'avais mis des int... :-)pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est plus
clair.
ouais... quand j'ai commencé le C, à chaque post que je faisais ou
j'écrivais sizeof(*tab), il y un mec qui, systématiquement (un peu comme
toi ?) me faisait une réponse pour me dire que c'était inutile. Il
s'appelait ED si je me souviens bien...bon allé, je te taquine.
Emmanuel doit etre en vacances lui aussi, mais j'insiste sur la lisibilite.
pourquoi printf et exit ? return NULL est plus classique pour une
fonction
oui, moi dans l'utilisation que je fais de mes programmes (je ne fais pas
de temps réel), j'aime bien le printf qui me dit tout de suite ou ça
plante (en générale j'ajoute un __FILE__ et __LINE__)
alors mets un assert ?
Bof : si on va faire exit, a quoi bon ?
Ben c'est plus propre non ? Si je ne l'avais pas fait un autre m'aurait
dit : t'as pas libéré la mémoire, c'est pas glop !
pour retourner NULL en effet il faut liberer les trucs deja alloues qui vont
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable
a
Quand j'ai lu le boum, j'ai sursauté et je suis devenu tout rouge. On voit
l'oeil de l'expert aguérrit par de nombre revues de codes !
Eh oui !
Incomplet : les tableaux de caracteres alloues ne sont pas initialises,
il aurait suffit de les allouer par calloc(chaine_size, sizeof(char))
blablabla...
Certes, mais pour un devoir de vacances gratos... et heureusement que j'ai
pas utilisé de strncat et touti quanti ;-)
strncpy et encore pire ;-)
Donc je retiens quoi ? Pas de size_t dans les indices de boucles ?
Donc je retiens quoi ? Pas de size_t dans les indices de boucles ?
Donc je retiens quoi ? Pas de size_t dans les indices de boucles ?
Donc je retiens quoi ? Pas de size_t dans les indices de boucles ?
for(j=i-1;j>=0;j--) free(tab[j]);
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable a
un moment de cette boucle fort longue.
l'alternative for (j = i; j-- > 0;) ... n'est pas tres elegante, mais evite
cet ecueil.
for(j=i-1;j>=0;j--) free(tab[j]);
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable a
un moment de cette boucle fort longue.
l'alternative for (j = i; j-- > 0;) ... n'est pas tres elegante, mais evite
cet ecueil.
for(j=i-1;j>=0;j--) free(tab[j]);
BOUM ! si i vaut 0, j vaut MAX_UINT qui est >= 0 et crash tres probable a
un moment de cette boucle fort longue.
l'alternative for (j = i; j-- > 0;) ... n'est pas tres elegante, mais evite
cet ecueil.
"AG" a écrit dans le message de news:char ** tab=malloc(tab_size*sizeof*tab);
pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est
plus clair.
"AG" <ag@tb.fr> a écrit dans le message de news:
char ** tab=malloc(tab_size*sizeof*tab);
pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est
plus clair.
"AG" a écrit dans le message de news:char ** tab=malloc(tab_size*sizeof*tab);
pas tres lisible : tab_size * sizeof(*tab) bien que plus verbeux est
plus clair.