non ok ma question était mal posé! mmême très mal posé!!! mais ok fallait simplement faire : strcpy(tableau,"");
Ou tableau[0]=0; Mais là, tu mets une chaine vide dans tableau, tu ne restaures pas un état initial.
--Que crois-tu qu'il y avait "avant" dans ton tableau ? une allocation mémoire!!!
Nous avons un problème de vocabulaire. Dans "tableau", il y avait des char à valeur indéterminée.
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
un.gabacho.sans.pourrier
Marc Boyer a donné une indication.
Le Scornec Denis wrote:
non ok ma question était mal posé! mmême très mal posé!!! mais ok fallait simplement faire : strcpy(tableau,"");
Ou tableau[0]=0; Mais là, tu mets une chaine vide dans tableau, tu ne restaures pas un état initial.
Si ce tableau est bien destiné à être utilisé comme chaîne de caractère, auquel cas il serait de bon ton de le déclarer par un truc du genre
char tableau[100] = "lapin"; /* n'importe quelle chaine * de longueur < 100 */
ou si on veut vraiment une chaine vide
char tableau[100] = "";
Mais si le monsieur veut travailler avec un tableau de char et qu'il les veut tous à 0 au début pour des raisons que nous n'avons pas à connaître et d'ailleurs nous sommes des gens discrets, il faut que le monsieur il fasse une boucle. Genre ça : for(i=0 ; i<100 ; tableau[i++]=0) {};
--Que crois-tu qu'il y avait "avant" dans ton tableau ? une allocation mémoire!!!
Nous avons un problème de vocabulaire.
Hem. Je crois que y a quelques problèmes. Ça m'a toujours surpris d'ailleurs de rencontrer des cracks en info qui sont par ailleurs munis d'une orthographe catastrophique : heureusement que le compilateur de leurs lecteurs est indulgent.
Dans "tableau", il y avait des char à valeur indéterminée.
La même chose arrive avec les pointeurs. Dans les divers trucs que j'ai feuilleté depuis deux semaines je n'ai vu nulle part le conseil d'initialiser les pointeurs à NULL.
J'ai fait des essais de structures chaînées : si on fait simplement une liste, comme ça :
struct pile { int elt; struct pile * suivant; };
int empile(struct pile * * pcour, int x){ struct pile * nouv; if ((nouv = malloc(sizeof(struct pile))) == NULL) {return 1;}
int depile(struct pile * * pcour, int * px) { struct pile * nouv; if (*pcour) { *px = (*pcour) -> elt; nouv = (*pcour) -> suivant; free((void *) *pcour); *pcour = nouv; return 0; } /*Si on a transmis une pile vide... */ return 1; }
Et puis après on fait un
struc pile * cour; int a;
Et on empile soigneusement des choses avec des appels successifs à empile(&cour, a);
Et puis on peut dépiler des choses qu'on a empilé, avec dépile(&cour, &a);
Et tout va bien. Et à la fin on veut vider la pile : while(!depile(&cour,&a)) {};
Et patatras, on ne trouve pas la fin de la pile.
C'était ma série : je vous raconte ma vie...
Marc Boyer a donné une indication.
Le Scornec Denis wrote:
non ok ma question était mal posé! mmême très mal posé!!!
mais ok
fallait simplement faire : strcpy(tableau,"");
Ou tableau[0]=0;
Mais là, tu mets une chaine vide dans tableau, tu ne restaures
pas un état initial.
Si ce tableau est bien destiné à être utilisé comme chaîne de
caractère, auquel cas il serait de bon ton de le déclarer par un
truc du genre
char tableau[100] = "lapin"; /* n'importe quelle chaine
* de longueur < 100 */
ou si on veut vraiment une chaine vide
char tableau[100] = "";
Mais si le monsieur veut travailler avec un tableau de char
et qu'il les veut tous à 0 au début pour des raisons que
nous n'avons pas à connaître et d'ailleurs nous sommes des
gens discrets, il faut que le monsieur il fasse une boucle.
Genre ça : for(i=0 ; i<100 ; tableau[i++]=0) {};
--Que crois-tu qu'il y avait "avant" dans ton tableau ?
une allocation mémoire!!!
Nous avons un problème de vocabulaire.
Hem. Je crois que y a quelques problèmes.
Ça m'a toujours surpris d'ailleurs de rencontrer des cracks
en info qui sont par ailleurs munis d'une orthographe
catastrophique : heureusement que le compilateur de leurs
lecteurs est indulgent.
Dans "tableau", il y avait des char à valeur indéterminée.
La même chose arrive avec les pointeurs. Dans les divers
trucs que j'ai feuilleté depuis deux semaines je n'ai vu
nulle part le conseil d'initialiser les pointeurs à NULL.
J'ai fait des essais de structures chaînées : si on fait
simplement une liste, comme ça :
struct pile {
int elt;
struct pile * suivant;
};
int empile(struct pile * * pcour, int x){
struct pile * nouv;
if ((nouv = malloc(sizeof(struct pile))) == NULL)
{return 1;}
non ok ma question était mal posé! mmême très mal posé!!! mais ok fallait simplement faire : strcpy(tableau,"");
Ou tableau[0]=0; Mais là, tu mets une chaine vide dans tableau, tu ne restaures pas un état initial.
Si ce tableau est bien destiné à être utilisé comme chaîne de caractère, auquel cas il serait de bon ton de le déclarer par un truc du genre
char tableau[100] = "lapin"; /* n'importe quelle chaine * de longueur < 100 */
ou si on veut vraiment une chaine vide
char tableau[100] = "";
Mais si le monsieur veut travailler avec un tableau de char et qu'il les veut tous à 0 au début pour des raisons que nous n'avons pas à connaître et d'ailleurs nous sommes des gens discrets, il faut que le monsieur il fasse une boucle. Genre ça : for(i=0 ; i<100 ; tableau[i++]=0) {};
--Que crois-tu qu'il y avait "avant" dans ton tableau ? une allocation mémoire!!!
Nous avons un problème de vocabulaire.
Hem. Je crois que y a quelques problèmes. Ça m'a toujours surpris d'ailleurs de rencontrer des cracks en info qui sont par ailleurs munis d'une orthographe catastrophique : heureusement que le compilateur de leurs lecteurs est indulgent.
Dans "tableau", il y avait des char à valeur indéterminée.
La même chose arrive avec les pointeurs. Dans les divers trucs que j'ai feuilleté depuis deux semaines je n'ai vu nulle part le conseil d'initialiser les pointeurs à NULL.
J'ai fait des essais de structures chaînées : si on fait simplement une liste, comme ça :
struct pile { int elt; struct pile * suivant; };
int empile(struct pile * * pcour, int x){ struct pile * nouv; if ((nouv = malloc(sizeof(struct pile))) == NULL) {return 1;}
int depile(struct pile * * pcour, int * px) { struct pile * nouv; if (*pcour) { *px = (*pcour) -> elt; nouv = (*pcour) -> suivant; free((void *) *pcour); *pcour = nouv; return 0; } /*Si on a transmis une pile vide... */ return 1; }
Et puis après on fait un
struc pile * cour; int a;
Et on empile soigneusement des choses avec des appels successifs à empile(&cour, a);
Et puis on peut dépiler des choses qu'on a empilé, avec dépile(&cour, &a);
Et tout va bien. Et à la fin on veut vider la pile : while(!depile(&cour,&a)) {};
Et patatras, on ne trouve pas la fin de la pile.
C'était ma série : je vous raconte ma vie...
Marc Boyer
wrote:
Marc Boyer a donné une indication.
Le Scornec Denis wrote:
non ok ma question était mal posé! mmême très mal posé!!! mais ok fallait simplement faire : strcpy(tableau,"");
Ou tableau[0]=0; Mais là, tu mets une chaine vide dans tableau, tu ne restaures pas un état initial.
Si ce tableau est bien destiné à être utilisé comme chaîne de caractère, auquel cas il serait de bon ton de le déclarer par un truc du genre
char tableau[100] = "lapin"; /* n'importe quelle chaine * de longueur < 100 */
ou si on veut vraiment une chaine vide
char tableau[100] = "";
C'est l'éternelle question de l'initialisation des variables.
--Que crois-tu qu'il y avait "avant" dans ton tableau ? une allocation mémoire!!!
Nous avons un problème de vocabulaire. Dans "tableau", il y avait des char à valeur indéterminée.
La même chose arrive avec les pointeurs. Dans les divers trucs que j'ai feuilleté depuis deux semaines je n'ai vu nulle part le conseil d'initialiser les pointeurs à NULL.
Problème d'initialisation... On peut dire, en regardant la signature de free, que ce n'est pas la "culture" C.
J'ai fait des essais de structures chaînées : si on fait simplement une liste, comme ça :
struct pile; int empile(struct pile * * pcour, int x); int depile(struct pile * * pcour, int * px);
Et puis après on fait un
struc pile * cour; int a;
Et oui, quand on fait des ADT/POO, on apprend à donner *aussi* un initialiseur/constructeur. int newPile(struct pile*);
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
un.gabacho.sans.pourrier@free.fr wrote:
Marc Boyer a donné une indication.
Le Scornec Denis wrote:
non ok ma question était mal posé! mmême très mal posé!!!
mais ok
fallait simplement faire : strcpy(tableau,"");
Ou tableau[0]=0;
Mais là, tu mets une chaine vide dans tableau, tu ne restaures
pas un état initial.
Si ce tableau est bien destiné à être utilisé comme chaîne de
caractère, auquel cas il serait de bon ton de le déclarer par un
truc du genre
char tableau[100] = "lapin"; /* n'importe quelle chaine
* de longueur < 100 */
ou si on veut vraiment une chaine vide
char tableau[100] = "";
C'est l'éternelle question de l'initialisation des variables.
--Que crois-tu qu'il y avait "avant" dans ton tableau ?
une allocation mémoire!!!
Nous avons un problème de vocabulaire.
Dans "tableau", il y avait des char à valeur indéterminée.
La même chose arrive avec les pointeurs. Dans les divers
trucs que j'ai feuilleté depuis deux semaines je n'ai vu
nulle part le conseil d'initialiser les pointeurs à NULL.
Problème d'initialisation...
On peut dire, en regardant la signature de free,
que ce n'est pas la "culture" C.
J'ai fait des essais de structures chaînées : si on fait
simplement une liste, comme ça :
struct pile;
int empile(struct pile * * pcour, int x);
int depile(struct pile * * pcour, int * px);
Et puis après on fait un
struc pile * cour;
int a;
Et oui, quand on fait des ADT/POO, on apprend à donner
*aussi* un initialiseur/constructeur.
int newPile(struct pile*);
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
non ok ma question était mal posé! mmême très mal posé!!! mais ok fallait simplement faire : strcpy(tableau,"");
Ou tableau[0]=0; Mais là, tu mets une chaine vide dans tableau, tu ne restaures pas un état initial.
Si ce tableau est bien destiné à être utilisé comme chaîne de caractère, auquel cas il serait de bon ton de le déclarer par un truc du genre
char tableau[100] = "lapin"; /* n'importe quelle chaine * de longueur < 100 */
ou si on veut vraiment une chaine vide
char tableau[100] = "";
C'est l'éternelle question de l'initialisation des variables.
--Que crois-tu qu'il y avait "avant" dans ton tableau ? une allocation mémoire!!!
Nous avons un problème de vocabulaire. Dans "tableau", il y avait des char à valeur indéterminée.
La même chose arrive avec les pointeurs. Dans les divers trucs que j'ai feuilleté depuis deux semaines je n'ai vu nulle part le conseil d'initialiser les pointeurs à NULL.
Problème d'initialisation... On peut dire, en regardant la signature de free, que ce n'est pas la "culture" C.
J'ai fait des essais de structures chaînées : si on fait simplement une liste, comme ça :
struct pile; int empile(struct pile * * pcour, int x); int depile(struct pile * * pcour, int * px);
Et puis après on fait un
struc pile * cour; int a;
Et oui, quand on fait des ADT/POO, on apprend à donner *aussi* un initialiseur/constructeur. int newPile(struct pile*);
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
un.gabacho.sans.pourrier
Marc Boyer m'a fait remarquer :
Et oui, quand on fait des ADT/POO, on apprend à donner *aussi* un initialiseur/constructeur. int newPile(struct pile*);
Tiens c'est pas con. J'avais pas pensé à ça, j'ai bien fait de raconter ma vie. Quand je vous le disais qu'on en apprenait tous les jours ici.
Marc Boyer m'a fait remarquer :
Et oui, quand on fait des ADT/POO, on apprend à donner
*aussi* un initialiseur/constructeur.
int newPile(struct pile*);
Tiens c'est pas con. J'avais pas pensé à ça, j'ai bien fait de
raconter ma vie. Quand je vous le disais qu'on en apprenait tous les
jours ici.
Voilà qui est fort intéressant. J'ignorais jusqu'à l'existence de cette fonction. Je tâcherai de m'en souvenir.
Vadis
Bonjour;
Plutôt que d'utiliser une boucle pour initialiser un tableau, je prefere utiliser la fonction memset ou l'équivalent API windows FillMemory ou encore ZeroMemory.
boucle:
for(i=0 ; i<100 ; tableau[i++]=0) {};
memset: memset(Tableau,0,sizeof(Tableau)) ;
@++
Bonjour;
Plutôt que d'utiliser une boucle pour initialiser un tableau, je prefere
utiliser la fonction memset ou l'équivalent API windows FillMemory ou
encore ZeroMemory.
Plutôt que d'utiliser une boucle pour initialiser un tableau, je prefere utiliser la fonction memset ou l'équivalent API windows FillMemory ou encore ZeroMemory.
boucle:
for(i=0 ; i<100 ; tableau[i++]=0) {};
memset: memset(Tableau,0,sizeof(Tableau)) ;
@++
Bertrand Mollinier Toublet
wrote:
"Vadis" writes:
boucle:
for(i=0 ; i<100 ; tableau[i++]=0) {};
memset: memset(Tableau,0,sizeof(Tableau)) ;
Voilà qui est fort intéressant. J'ignorais jusqu'à l'existence de cette fonction. Je tâcherai de m'en souvenir.
Perso, je te conseillerais plutot d'oublier. En theorie, il n'y a que pour les char qu'il est garanti que la representation binaire avec tous les bits a zero soit valide et qu'elle represente la valeur zero. Tous les autres types peuvent avoir des bits de padding (meme si ca n'arrive plutot que sur des architectures pathologiques), et une representation binaire avec tous les bits a zero peut-etre une valeur de trap.
C'est encore pire pour les pointeurs. Il n'y a meme pas besoin d'etre sur une implementation particulierement tordue pour que le pointeur NULL ait une representation binaire avec tous les bits a zero.
Finalement, pour initialiser un tableau entier avec tous les membres avec la meme valeur (disons 0, par exemple), rien de tel que:
char tableau[100] = {0};
-- Bertrand Mollinier Toublet - Le top-posting. - Quelle est la pratique la plus chiante sur Usenet ?
un.gabacho.sans.pourrier@free.fr wrote:
"Vadis" <vadis@wanadoo.fr> writes:
boucle:
for(i=0 ; i<100 ; tableau[i++]=0) {};
memset:
memset(Tableau,0,sizeof(Tableau)) ;
Voilà qui est fort intéressant. J'ignorais jusqu'à l'existence
de cette fonction. Je tâcherai de m'en souvenir.
Perso, je te conseillerais plutot d'oublier. En theorie, il n'y a que
pour les char qu'il est garanti que la representation binaire avec tous
les bits a zero soit valide et qu'elle represente la valeur zero. Tous
les autres types peuvent avoir des bits de padding (meme si ca n'arrive
plutot que sur des architectures pathologiques), et une representation
binaire avec tous les bits a zero peut-etre une valeur de trap.
C'est encore pire pour les pointeurs. Il n'y a meme pas besoin d'etre
sur une implementation particulierement tordue pour que le pointeur NULL
ait une representation binaire avec tous les bits a zero.
Finalement, pour initialiser un tableau entier avec tous les membres
avec la meme valeur (disons 0, par exemple), rien de tel que:
char tableau[100] = {0};
--
Bertrand Mollinier Toublet
- Le top-posting.
- Quelle est la pratique la plus chiante sur Usenet ?
Voilà qui est fort intéressant. J'ignorais jusqu'à l'existence de cette fonction. Je tâcherai de m'en souvenir.
Perso, je te conseillerais plutot d'oublier. En theorie, il n'y a que pour les char qu'il est garanti que la representation binaire avec tous les bits a zero soit valide et qu'elle represente la valeur zero. Tous les autres types peuvent avoir des bits de padding (meme si ca n'arrive plutot que sur des architectures pathologiques), et une representation binaire avec tous les bits a zero peut-etre une valeur de trap.
C'est encore pire pour les pointeurs. Il n'y a meme pas besoin d'etre sur une implementation particulierement tordue pour que le pointeur NULL ait une representation binaire avec tous les bits a zero.
Finalement, pour initialiser un tableau entier avec tous les membres avec la meme valeur (disons 0, par exemple), rien de tel que:
char tableau[100] = {0};
-- Bertrand Mollinier Toublet - Le top-posting. - Quelle est la pratique la plus chiante sur Usenet ?
AG
Finalement, pour initialiser un tableau entier avec tous les membres avec la meme valeur (disons 0, par exemple), rien de tel que:
char tableau[100] = {0};
Oui mais lors d'une RE-initialisation ?
Finalement, pour initialiser un tableau entier avec tous les membres
avec la meme valeur (disons 0, par exemple), rien de tel que: