In article <3f3c05c4$0$9626$,
Richard Delorme wrote:char *chaine = "salut"; // ok.
chaine = " pouet pouet"; // correct.
chaine = "truc bidule machin chose"; //encore correct.
chaine = tableau; // toujours ok.
chaine = malloc(123); // ok.
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
"toto"[0] = 'T' ; // ok
NON
strcpy("toto", "tutu") ; //ok
NON
strcpy("toto", chaine) ; //ok
NON
Mais
"toto" = "tutu" ; // non
"toto" = chaine ; // non
enfin, j'ai pas verifie la norme, mais
je ne vois pas pourquoi ca ne serait pas le cas, et en tous cas
ca se passe comme ca avec gcc.
Comme tu dis, tu n'as pas verifie la norme qui dit que les, euh, "string
"toto" est un char *, au meme titre que 1 est un int.
C'est une constante char * donc.
Avec une difference par rapport a 1, qui est que sa valeur
correspond a l'adresse d'une zone de memoire qui contiendra
les caracteres t, o, t, o, au chargement du programme.
Chez moi la compilation de strcpy("toto", "tutu"), si elle
se passe sans le moindre warning, genere un programme dont l'execution
provoque, on s'en doutait un peu, un Segmentation fault.
La, je comprends plus. Tu es schizo ou quoi ? Plus haut, tu ecris, a
Mais je suis sur que dans le passe j'ai deja fait qqchose du genre
printf("Gunaydin dunyan") ;
strcpy("Gunaydin dunyan", "Hello worldn") ;
printf("Gunaydin dunyan") ;
avec suivant les compilo est les plateformes des resultats differents :
parfois le 2e printf affiche "Gunaydin dunyan", parfois "Hello worldn".
Ca depend si le compilo est assez malin pour creer une seule fois
la chaine ou non.
Oui... et non. C'est deja pas mal que ton programme ne t'aie pas explose
In article <3f3c05c4$0$9626$7a628cd7@news.club-internet.fr>,
Richard Delorme wrote:
char *chaine = "salut"; // ok.
chaine = " pouet pouet"; // correct.
chaine = "truc bidule machin chose"; //encore correct.
chaine = tableau; // toujours ok.
chaine = malloc(123); // ok.
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
"toto"[0] = 'T' ; // ok
NON
strcpy("toto", "tutu") ; //ok
NON
strcpy("toto", chaine) ; //ok
NON
Mais
"toto" = "tutu" ; // non
"toto" = chaine ; // non
enfin, j'ai pas verifie la norme, mais
je ne vois pas pourquoi ca ne serait pas le cas, et en tous cas
ca se passe comme ca avec gcc.
Comme tu dis, tu n'as pas verifie la norme qui dit que les, euh, "string
"toto" est un char *, au meme titre que 1 est un int.
C'est une constante char * donc.
Avec une difference par rapport a 1, qui est que sa valeur
correspond a l'adresse d'une zone de memoire qui contiendra
les caracteres t, o, t, o, au chargement du programme.
Chez moi la compilation de strcpy("toto", "tutu"), si elle
se passe sans le moindre warning, genere un programme dont l'execution
provoque, on s'en doutait un peu, un Segmentation fault.
La, je comprends plus. Tu es schizo ou quoi ? Plus haut, tu ecris, a
Mais je suis sur que dans le passe j'ai deja fait qqchose du genre
printf("Gunaydin dunyan") ;
strcpy("Gunaydin dunyan", "Hello worldn") ;
printf("Gunaydin dunyan") ;
avec suivant les compilo est les plateformes des resultats differents :
parfois le 2e printf affiche "Gunaydin dunyan", parfois "Hello worldn".
Ca depend si le compilo est assez malin pour creer une seule fois
la chaine ou non.
Oui... et non. C'est deja pas mal que ton programme ne t'aie pas explose
In article <3f3c05c4$0$9626$,
Richard Delorme wrote:char *chaine = "salut"; // ok.
chaine = " pouet pouet"; // correct.
chaine = "truc bidule machin chose"; //encore correct.
chaine = tableau; // toujours ok.
chaine = malloc(123); // ok.
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
"toto"[0] = 'T' ; // ok
NON
strcpy("toto", "tutu") ; //ok
NON
strcpy("toto", chaine) ; //ok
NON
Mais
"toto" = "tutu" ; // non
"toto" = chaine ; // non
enfin, j'ai pas verifie la norme, mais
je ne vois pas pourquoi ca ne serait pas le cas, et en tous cas
ca se passe comme ca avec gcc.
Comme tu dis, tu n'as pas verifie la norme qui dit que les, euh, "string
"toto" est un char *, au meme titre que 1 est un int.
C'est une constante char * donc.
Avec une difference par rapport a 1, qui est que sa valeur
correspond a l'adresse d'une zone de memoire qui contiendra
les caracteres t, o, t, o, au chargement du programme.
Chez moi la compilation de strcpy("toto", "tutu"), si elle
se passe sans le moindre warning, genere un programme dont l'execution
provoque, on s'en doutait un peu, un Segmentation fault.
La, je comprends plus. Tu es schizo ou quoi ? Plus haut, tu ecris, a
Mais je suis sur que dans le passe j'ai deja fait qqchose du genre
printf("Gunaydin dunyan") ;
strcpy("Gunaydin dunyan", "Hello worldn") ;
printf("Gunaydin dunyan") ;
avec suivant les compilo est les plateformes des resultats differents :
parfois le 2e printf affiche "Gunaydin dunyan", parfois "Hello worldn".
Ca depend si le compilo est assez malin pour creer une seule fois
la chaine ou non.
Oui... et non. C'est deja pas mal que ton programme ne t'aie pas explose
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
Explique moi, sans m'insulter encore stp, ce qu'est un UB
(Unchecked boundary ?), et en quoi ca concerne la *syntaxe*.
Comment le compilo pourrait il laisser passer (sauf bug) une erreur
syntaxique ?
Explique moi, sans m'insulter encore stp, ce qu'est un UB
(Unchecked boundary ?), et en quoi ca concerne la *syntaxe*.
Comment le compilo pourrait il laisser passer (sauf bug) une erreur
syntaxique ?
Explique moi, sans m'insulter encore stp, ce qu'est un UB
(Unchecked boundary ?), et en quoi ca concerne la *syntaxe*.
Comment le compilo pourrait il laisser passer (sauf bug) une erreur
syntaxique ?
En fait, j'ai une structure très simple que je veux écrire dans un
fichier :
typedef struct{
char *txt;
int x;
}TEST;
Ecriture dans le fichier :
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
t->x = 257;
file = fopen("fichier_test", "rb");
write(file, t, sizeof(TEST));
fclose(file);
Quand je regarde le fichier créé avec un éditeur héxadécimal, je
constate que ma chaine de caractere n'est pas enregistré, mais
seulement son adresse (je pense), car j'ai beau changer la chaine,
c'est toujour la meme chose d'enregistré. tandi que le int lui est
bien enregistré dans le fichier.
En fait, j'ai une structure très simple que je veux écrire dans un
fichier :
typedef struct{
char *txt;
int x;
}TEST;
Ecriture dans le fichier :
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
t->x = 257;
file = fopen("fichier_test", "rb");
write(file, t, sizeof(TEST));
fclose(file);
Quand je regarde le fichier créé avec un éditeur héxadécimal, je
constate que ma chaine de caractere n'est pas enregistré, mais
seulement son adresse (je pense), car j'ai beau changer la chaine,
c'est toujour la meme chose d'enregistré. tandi que le int lui est
bien enregistré dans le fichier.
En fait, j'ai une structure très simple que je veux écrire dans un
fichier :
typedef struct{
char *txt;
int x;
}TEST;
Ecriture dans le fichier :
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
t->x = 257;
file = fopen("fichier_test", "rb");
write(file, t, sizeof(TEST));
fclose(file);
Quand je regarde le fichier créé avec un éditeur héxadécimal, je
constate que ma chaine de caractere n'est pas enregistré, mais
seulement son adresse (je pense), car j'ai beau changer la chaine,
c'est toujour la meme chose d'enregistré. tandi que le int lui est
bien enregistré dans le fichier.
UB undefined behaviour .... comportement imprevisible...
tu ne peux pas avoir la preuve qu'un truc est correct simplement
en verifiant que marche...
ça peut marcher par hazard...
par exemple t[i++] = i ;
UB undefined behaviour .... comportement imprevisible...
tu ne peux pas avoir la preuve qu'un truc est correct simplement
en verifiant que marche...
ça peut marcher par hazard...
par exemple t[i++] = i ;
UB undefined behaviour .... comportement imprevisible...
tu ne peux pas avoir la preuve qu'un truc est correct simplement
en verifiant que marche...
ça peut marcher par hazard...
par exemple t[i++] = i ;
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
Si tu pouvais t'abstenir d'etre agressif envers les gens qui ne t'on
encore rien fait, ca aiderait aussi.
Explique moi, sans m'insulter encore stp, ce qu'est un UB
(Unchecked boundary ?), et en quoi ca concerne la *syntaxe*.
Comment le compilo pourrait il laisser passer (sauf bug) une erreur
syntaxique ?
Chez moi la compilation de strcpy("toto", "tutu"), si elle
se passe sans le moindre warning, genere un programme dont l'execution
provoque, on s'en doutait un peu, un Segmentation fault.
La, je comprends plus. Tu es schizo ou quoi ? Plus haut, tu ecris, a
tort: strcpy("toto", "tutu");//ok et ici, tu dis que ca ne marche
evidement pas ? Mmmmh...
Non je ne suis pas schizo. Enfin je ne crois pas. Simplement je sais lire.
Il y a une difference entre quelque chose qui compile, et quelquechose
qui marche.
((char *)0)[0] = 'X' ;
est legal que je sache. Ca n'a pourtant aucune chance de marcher.
ou si tu prefere absolument des notations plus habituelles :
char *T ;
T=NULL ;
T[0]='X' ;
(mais c'est vraiment juste pour gaspiller un nom)
Donc peut etre que la norme interdit explicitement mes horreurs avec
"toto". Comme je l'ai dit depuis le debut, je n'en sais rien, et en
l'occurrence ca n'a pas tellement d'importance puisque je voulais
illustrer le faite "toto" est un pointeur constant. Mais le fait
que je dise que ca ne marche "evidemment" pas n'a rien a voir la
dedans, et ne me fait pas meriter le qualificatif de schizo.
Il fallait bien entendu prendre le qualificatif au sens clinique du
Mais je suis sur que dans le passe j'ai deja fait qqchose du genre
printf("Gunaydin dunyan") ;
strcpy("Gunaydin dunyan", "Hello worldn") ;
printf("Gunaydin dunyan") ;
avec suivant les compilo est les plateformes des resultats differents :
parfois le 2e printf affiche "Gunaydin dunyan", parfois "Hello worldn".
Ca depend si le compilo est assez malin pour creer une seule fois
la chaine ou non.
Oui... et non. C'est deja pas mal que ton programme ne t'aie pas explose
a la figure a la ligne strcpy.
Il m'explose a la figure a la ligne strcpy. Et alors ?
C'est interdit de faire des programmes qui explosent a la figure ?
Enfin du temps de dos il ne le faisait pas. Et ca n'etait pas interdit
(toujours que je sache) non plus. C'etait juste encore plus sale que
maintenant, puisqu'a l'epoque on pouvait avoir un petit doute quant a
savoir si l'auteur de ces lignes est en train de blaguer ou non.
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
Si tu pouvais t'abstenir d'etre agressif envers les gens qui ne t'on
encore rien fait, ca aiderait aussi.
Explique moi, sans m'insulter encore stp, ce qu'est un UB
(Unchecked boundary ?), et en quoi ca concerne la *syntaxe*.
Comment le compilo pourrait il laisser passer (sauf bug) une erreur
syntaxique ?
Chez moi la compilation de strcpy("toto", "tutu"), si elle
se passe sans le moindre warning, genere un programme dont l'execution
provoque, on s'en doutait un peu, un Segmentation fault.
La, je comprends plus. Tu es schizo ou quoi ? Plus haut, tu ecris, a
tort: strcpy("toto", "tutu");//ok et ici, tu dis que ca ne marche
evidement pas ? Mmmmh...
Non je ne suis pas schizo. Enfin je ne crois pas. Simplement je sais lire.
Il y a une difference entre quelque chose qui compile, et quelquechose
qui marche.
((char *)0)[0] = 'X' ;
est legal que je sache. Ca n'a pourtant aucune chance de marcher.
ou si tu prefere absolument des notations plus habituelles :
char *T ;
T=NULL ;
T[0]='X' ;
(mais c'est vraiment juste pour gaspiller un nom)
Donc peut etre que la norme interdit explicitement mes horreurs avec
"toto". Comme je l'ai dit depuis le debut, je n'en sais rien, et en
l'occurrence ca n'a pas tellement d'importance puisque je voulais
illustrer le faite "toto" est un pointeur constant. Mais le fait
que je dise que ca ne marche "evidemment" pas n'a rien a voir la
dedans, et ne me fait pas meriter le qualificatif de schizo.
Il fallait bien entendu prendre le qualificatif au sens clinique du
Mais je suis sur que dans le passe j'ai deja fait qqchose du genre
printf("Gunaydin dunyan") ;
strcpy("Gunaydin dunyan", "Hello worldn") ;
printf("Gunaydin dunyan") ;
avec suivant les compilo est les plateformes des resultats differents :
parfois le 2e printf affiche "Gunaydin dunyan", parfois "Hello worldn".
Ca depend si le compilo est assez malin pour creer une seule fois
la chaine ou non.
Oui... et non. C'est deja pas mal que ton programme ne t'aie pas explose
a la figure a la ligne strcpy.
Il m'explose a la figure a la ligne strcpy. Et alors ?
C'est interdit de faire des programmes qui explosent a la figure ?
Enfin du temps de dos il ne le faisait pas. Et ca n'etait pas interdit
(toujours que je sache) non plus. C'etait juste encore plus sale que
maintenant, puisqu'a l'epoque on pouvait avoir un petit doute quant a
savoir si l'auteur de ces lignes est en train de blaguer ou non.
Pour en rajouter une couche :
Ce genre de couche, il vaut mieux s'abstenir...
Si tu pouvais t'abstenir d'etre agressif envers les gens qui ne t'on
encore rien fait, ca aiderait aussi.
Explique moi, sans m'insulter encore stp, ce qu'est un UB
(Unchecked boundary ?), et en quoi ca concerne la *syntaxe*.
Comment le compilo pourrait il laisser passer (sauf bug) une erreur
syntaxique ?
Chez moi la compilation de strcpy("toto", "tutu"), si elle
se passe sans le moindre warning, genere un programme dont l'execution
provoque, on s'en doutait un peu, un Segmentation fault.
La, je comprends plus. Tu es schizo ou quoi ? Plus haut, tu ecris, a
tort: strcpy("toto", "tutu");//ok et ici, tu dis que ca ne marche
evidement pas ? Mmmmh...
Non je ne suis pas schizo. Enfin je ne crois pas. Simplement je sais lire.
Il y a une difference entre quelque chose qui compile, et quelquechose
qui marche.
((char *)0)[0] = 'X' ;
est legal que je sache. Ca n'a pourtant aucune chance de marcher.
ou si tu prefere absolument des notations plus habituelles :
char *T ;
T=NULL ;
T[0]='X' ;
(mais c'est vraiment juste pour gaspiller un nom)
Donc peut etre que la norme interdit explicitement mes horreurs avec
"toto". Comme je l'ai dit depuis le debut, je n'en sais rien, et en
l'occurrence ca n'a pas tellement d'importance puisque je voulais
illustrer le faite "toto" est un pointeur constant. Mais le fait
que je dise que ca ne marche "evidemment" pas n'a rien a voir la
dedans, et ne me fait pas meriter le qualificatif de schizo.
Il fallait bien entendu prendre le qualificatif au sens clinique du
Mais je suis sur que dans le passe j'ai deja fait qqchose du genre
printf("Gunaydin dunyan") ;
strcpy("Gunaydin dunyan", "Hello worldn") ;
printf("Gunaydin dunyan") ;
avec suivant les compilo est les plateformes des resultats differents :
parfois le 2e printf affiche "Gunaydin dunyan", parfois "Hello worldn".
Ca depend si le compilo est assez malin pour creer une seule fois
la chaine ou non.
Oui... et non. C'est deja pas mal que ton programme ne t'aie pas explose
a la figure a la ligne strcpy.
Il m'explose a la figure a la ligne strcpy. Et alors ?
C'est interdit de faire des programmes qui explosent a la figure ?
Enfin du temps de dos il ne le faisait pas. Et ca n'etait pas interdit
(toujours que je sache) non plus. C'etait juste encore plus sale que
maintenant, puisqu'a l'epoque on pouvait avoir un petit doute quant a
savoir si l'auteur de ces lignes est en train de blaguer ou non.
In article <3f3d24b9$0$27025$,
Stephane Legras-Decussy wrote:UB undefined behaviour .... comportement imprevisible...
tu ne peux pas avoir la preuve qu'un truc est correct simplement
en verifiant que marche...
ça peut marcher par hazard...
par exemple t[i++] = i ;
Certes. Et ton exemple est un bon exemple. C'est imprevisible, parce
que on ne sait meme pas ce que c'est sense compiler. On ne precise
par quel code doit etre genere.
Les exemples que j'ai donnes ne peuvent pas etre dans la meme
categorie d'erreur : ils sont sans ambiguites. J'utilise un
langage C syntaxiquement et contextuellement correct (je ne suis
pas sur pour le reste), et le programme est complement
clair et net :
quand j'ecris ((char *)0)[0] = 'X' ;
il n'y a pas trop de suspense pour savoir comment ce programme
va etre compile.
C'est, il me semble, egalement le cas pour "toto"[0]='X' ;
C'est parce que tu as une vue trop concrete de la machine sur laquelle
In article <3f3d24b9$0$27025$626a54ce@news.free.fr>,
Stephane Legras-Decussy wrote:
UB undefined behaviour .... comportement imprevisible...
tu ne peux pas avoir la preuve qu'un truc est correct simplement
en verifiant que marche...
ça peut marcher par hazard...
par exemple t[i++] = i ;
Certes. Et ton exemple est un bon exemple. C'est imprevisible, parce
que on ne sait meme pas ce que c'est sense compiler. On ne precise
par quel code doit etre genere.
Les exemples que j'ai donnes ne peuvent pas etre dans la meme
categorie d'erreur : ils sont sans ambiguites. J'utilise un
langage C syntaxiquement et contextuellement correct (je ne suis
pas sur pour le reste), et le programme est complement
clair et net :
quand j'ecris ((char *)0)[0] = 'X' ;
il n'y a pas trop de suspense pour savoir comment ce programme
va etre compile.
C'est, il me semble, egalement le cas pour "toto"[0]='X' ;
C'est parce que tu as une vue trop concrete de la machine sur laquelle
In article <3f3d24b9$0$27025$,
Stephane Legras-Decussy wrote:UB undefined behaviour .... comportement imprevisible...
tu ne peux pas avoir la preuve qu'un truc est correct simplement
en verifiant que marche...
ça peut marcher par hazard...
par exemple t[i++] = i ;
Certes. Et ton exemple est un bon exemple. C'est imprevisible, parce
que on ne sait meme pas ce que c'est sense compiler. On ne precise
par quel code doit etre genere.
Les exemples que j'ai donnes ne peuvent pas etre dans la meme
categorie d'erreur : ils sont sans ambiguites. J'utilise un
langage C syntaxiquement et contextuellement correct (je ne suis
pas sur pour le reste), et le programme est complement
clair et net :
quand j'ecris ((char *)0)[0] = 'X' ;
il n'y a pas trop de suspense pour savoir comment ce programme
va etre compile.
C'est, il me semble, egalement le cas pour "toto"[0]='X' ;
C'est parce que tu as une vue trop concrete de la machine sur laquelle
Il fallait bien entendu prendre le qualificatif au sens clinique du
terme. Apparement, tu disais, a quelques lignes d'intervalles, deux
choses totalement opposees, si bien que je n'ai pu que supposer que tu
souffrais de dedoublement de la personalite :-) Bref...
Tes deux exemples sont causent egalement des UB. Le premier parce que tu
"crees" un pointeur vers une zone de memoire qui /a priori/ ne
t'appartient pas.
Si le programme est a valeur didactique, comme par exemple quand tu
postes dans f.c.l.c, j'aurais tendance a penser que oui. Ou alors, tu
indiques clairement que le programme est mine jusqu'a la moelle, ce que
tu n'as pas (suffisament) fait.
Il fallait bien entendu prendre le qualificatif au sens clinique du
terme. Apparement, tu disais, a quelques lignes d'intervalles, deux
choses totalement opposees, si bien que je n'ai pu que supposer que tu
souffrais de dedoublement de la personalite :-) Bref...
Tes deux exemples sont causent egalement des UB. Le premier parce que tu
"crees" un pointeur vers une zone de memoire qui /a priori/ ne
t'appartient pas.
Si le programme est a valeur didactique, comme par exemple quand tu
postes dans f.c.l.c, j'aurais tendance a penser que oui. Ou alors, tu
indiques clairement que le programme est mine jusqu'a la moelle, ce que
tu n'as pas (suffisament) fait.
Il fallait bien entendu prendre le qualificatif au sens clinique du
terme. Apparement, tu disais, a quelques lignes d'intervalles, deux
choses totalement opposees, si bien que je n'ai pu que supposer que tu
souffrais de dedoublement de la personalite :-) Bref...
Tes deux exemples sont causent egalement des UB. Le premier parce que tu
"crees" un pointeur vers une zone de memoire qui /a priori/ ne
t'appartient pas.
Si le programme est a valeur didactique, comme par exemple quand tu
postes dans f.c.l.c, j'aurais tendance a penser que oui. Ou alors, tu
indiques clairement que le programme est mine jusqu'a la moelle, ce que
tu n'as pas (suffisament) fait.
En fait, j'ai une structure très simple que je veux écrire dans un
fichier :
typedef struct{
char *txt;
int x;
}TEST;
Ecriture dans le fichier :
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
t->x = 257;
file = fopen("fichier_test", "rb");
write(file, t, sizeof(TEST));
fclose(file);
Quand je regarde le fichier créé avec un éditeur héxadécimal, je
constate que ma chaine de caractere n'est pas enregistré, mais
seulement son adresse (je pense), car j'ai beau changer la chaine,
c'est toujour la meme chose d'enregistré. tandi que le int lui est
bien enregistré dans le fichier.
Pourrais-je avoir la bonne technique pour faire bien cette écriture ?
En fait, j'ai une structure très simple que je veux écrire dans un
fichier :
typedef struct{
char *txt;
int x;
}TEST;
Ecriture dans le fichier :
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
t->x = 257;
file = fopen("fichier_test", "rb");
write(file, t, sizeof(TEST));
fclose(file);
Quand je regarde le fichier créé avec un éditeur héxadécimal, je
constate que ma chaine de caractere n'est pas enregistré, mais
seulement son adresse (je pense), car j'ai beau changer la chaine,
c'est toujour la meme chose d'enregistré. tandi que le int lui est
bien enregistré dans le fichier.
Pourrais-je avoir la bonne technique pour faire bien cette écriture ?
En fait, j'ai une structure très simple que je veux écrire dans un
fichier :
typedef struct{
char *txt;
int x;
}TEST;
Ecriture dans le fichier :
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
t->x = 257;
file = fopen("fichier_test", "rb");
write(file, t, sizeof(TEST));
fclose(file);
Quand je regarde le fichier créé avec un éditeur héxadécimal, je
constate que ma chaine de caractere n'est pas enregistré, mais
seulement son adresse (je pense), car j'ai beau changer la chaine,
c'est toujour la meme chose d'enregistré. tandi que le int lui est
bien enregistré dans le fichier.
Pourrais-je avoir la bonne technique pour faire bien cette écriture ?
typedef struct{
char *txt;
int x;
}TEST;
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
probleme :
a aucun moment tu n'a reservé l'espace pour contenir
ta chaine "pouet pouet"...
tu a juste reservé l'adresse de cette chaine...
tu dois soit reserver cet espace en statique de taille fixe, soit
en dynamique en faisant a un moment :
txt = malloc ( longueur de la chaine )
ensuite tu utiliseras strcpy( ) pour remplir la chaine avec "pouet pouet",
(pas de = )
quant ça marchera, tu pourras reflechir à la methode pour ecrire
tout ça dans un fichier...
typedef struct{
char *txt;
int x;
}TEST;
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
probleme :
a aucun moment tu n'a reservé l'espace pour contenir
ta chaine "pouet pouet"...
tu a juste reservé l'adresse de cette chaine...
tu dois soit reserver cet espace en statique de taille fixe, soit
en dynamique en faisant a un moment :
txt = malloc ( longueur de la chaine )
ensuite tu utiliseras strcpy( ) pour remplir la chaine avec "pouet pouet",
(pas de = )
quant ça marchera, tu pourras reflechir à la methode pour ecrire
tout ça dans un fichier...
typedef struct{
char *txt;
int x;
}TEST;
TEST *t = (TEST *)malloc(sizeof(TEST));
FILE *file;
t->txt = "pouet pouet";
probleme :
a aucun moment tu n'a reservé l'espace pour contenir
ta chaine "pouet pouet"...
tu a juste reservé l'adresse de cette chaine...
tu dois soit reserver cet espace en statique de taille fixe, soit
en dynamique en faisant a un moment :
txt = malloc ( longueur de la chaine )
ensuite tu utiliseras strcpy( ) pour remplir la chaine avec "pouet pouet",
(pas de = )
quant ça marchera, tu pourras reflechir à la methode pour ecrire
tout ça dans un fichier...