Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

reinitialiser un tableau

24 réponses
Avatar
Le Scornec Denis
Comment reinitialiser un tableau déclarer:
char tableau[255]

Celui ci est initialiser avec une chaine de caractère mais je souhaiterais
effacer son contenu pour retourner à l'état initiale!!???

10 réponses

1 2 3
Avatar
Marc Boyer
In article <bltuck$ooh$, Le Scornec Denis wrote:
Comment reinitialiser un tableau déclarer:
char tableau[255]

Celui ci est initialiser avec une chaine de caractère mais je souhaiterais
effacer son contenu pour retourner à l'état initiale!!???


Il n'y a pas d'état initial.
Je crois que ta question montre une méconnaissance du langage.
Que crois-tu qu'il y avait "avant" dans ton tableau ?

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Le Scornec Denis
non ok ma question était mal posé! mmême très mal posé!!!
mais ok
fallait simplement faire : strcpy(tableau,"");

--Que crois-tu qu'il y avait "avant" dans ton tableau ?
une allocation mémoire!!!



"Marc Boyer" a écrit dans le message de news:
bltvgd$3ib$
In article <bltuck$ooh$, Le Scornec Denis wrote:
Comment reinitialiser un tableau déclarer:
char tableau[255]

Celui ci est initialiser avec une chaine de caractère mais je
souhaiterais


effacer son contenu pour retourner à l'état initiale!!???


Il n'y a pas d'état initial.
Je crois que ta question montre une méconnaissance du langage.
Que crois-tu qu'il y avait "avant" dans ton tableau ?

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(



Avatar
Marc Boyer
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.

--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 :-(

Avatar
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;}

nouv -> elt = x;
nouv -> suivant = * pcour;
*pcour = nouv;
return 0;
}

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...


Avatar
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 :-(



Avatar
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.

Avatar
un.gabacho.sans.pourrier
"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.


Avatar
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)) ;

@++

Avatar
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 ?



Avatar
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 ?

1 2 3