Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Etienne Rousee
Stephane Legras-Decussy a écrit :
char *s;
s = "abcd"; printf("%s",s); s = "xyz"; printf("%s",s); sauf que pour moi ça ne devrait même pas compiler...
Il n'y a pas de raison, c'est syntaxiquement correct.
je suis peut être super pas reveillé mais pour moi il faut reserver l'espace memoire et copier la chaine par strcpy...
Non, car l'instruction s = "abcd" ne fait qu'affecter l'adresse de "abcd" à la variable s, ce qui est correct syntaxiquement, donc passe à la compilation, et en plus ne pose pas de problème à l'exécution. Ce n'est pas la même chose que recopier le contenu d'une chaîne. Par contre, un strcpy sans réservation de mémoire provoquerait un plantage à l'exécution, un *s = ... aussi.
--
Etienne
Stephane Legras-Decussy a écrit :
char *s;
s = "abcd";
printf("%s",s);
s = "xyz";
printf("%s",s);
sauf que pour moi ça ne devrait même pas compiler...
Il n'y a pas de raison, c'est syntaxiquement correct.
je suis peut être super pas reveillé mais
pour moi il faut reserver l'espace memoire et copier la
chaine par strcpy...
Non, car l'instruction s = "abcd" ne fait qu'affecter
l'adresse de "abcd" à la variable s, ce qui est correct
syntaxiquement, donc passe à la compilation, et en plus
ne pose pas de problème à l'exécution.
Ce n'est pas la même chose que recopier le contenu d'une chaîne.
Par contre, un strcpy sans réservation de mémoire provoquerait
un plantage à l'exécution, un *s = ... aussi.
s = "abcd"; printf("%s",s); s = "xyz"; printf("%s",s); sauf que pour moi ça ne devrait même pas compiler...
Il n'y a pas de raison, c'est syntaxiquement correct.
je suis peut être super pas reveillé mais pour moi il faut reserver l'espace memoire et copier la chaine par strcpy...
Non, car l'instruction s = "abcd" ne fait qu'affecter l'adresse de "abcd" à la variable s, ce qui est correct syntaxiquement, donc passe à la compilation, et en plus ne pose pas de problème à l'exécution. Ce n'est pas la même chose que recopier le contenu d'une chaîne. Par contre, un strcpy sans réservation de mémoire provoquerait un plantage à l'exécution, un *s = ... aussi.
--
Etienne
Stephane Legras-Decussy
"Etienne Rousee" a écrit dans le message de news: 4990ca74$0$18391$
Non, car l'instruction s = "abcd" ne fait qu'affecter l'adresse de "abcd" à la variable s, ce qui est correct syntaxiquement, donc passe à la compilation, et en plus ne pose pas de problème à l'exécution. Ce n'est pas la même chose que recopier le contenu d'une chaîne. Par contre, un strcpy sans réservation de mémoire provoquerait un plantage à l'exécution, un *s = ... aussi.
ok, je viens de lire aussi la partie du site de emdel qui explique ça, c'est ok maintenant...
merci
"Etienne Rousee" <etienne@rousee.org> a écrit dans le message de news:
4990ca74$0$18391$ba4acef3@news.orange.fr...
Non, car l'instruction s = "abcd" ne fait qu'affecter
l'adresse de "abcd" à la variable s, ce qui est correct
syntaxiquement, donc passe à la compilation, et en plus
ne pose pas de problème à l'exécution.
Ce n'est pas la même chose que recopier le contenu d'une chaîne.
Par contre, un strcpy sans réservation de mémoire provoquerait
un plantage à l'exécution, un *s = ... aussi.
ok, je viens de lire aussi la partie du
site de emdel qui explique ça, c'est ok maintenant...
"Etienne Rousee" a écrit dans le message de news: 4990ca74$0$18391$
Non, car l'instruction s = "abcd" ne fait qu'affecter l'adresse de "abcd" à la variable s, ce qui est correct syntaxiquement, donc passe à la compilation, et en plus ne pose pas de problème à l'exécution. Ce n'est pas la même chose que recopier le contenu d'une chaîne. Par contre, un strcpy sans réservation de mémoire provoquerait un plantage à l'exécution, un *s = ... aussi.
ok, je viens de lire aussi la partie du site de emdel qui explique ça, c'est ok maintenant...
merci
Sylvain SF
Stephane Legras-Decussy a écrit :
ok, je viens de lire aussi la partie du site de emdel qui explique ça, c'est ok maintenant...
je connais pas m. emdel mais la notion de 'data segment' existe depuis ... toujours ou presque.
SF.
Stephane Legras-Decussy a écrit :
ok, je viens de lire aussi la partie du
site de emdel qui explique ça, c'est ok maintenant...
je connais pas m. emdel mais la notion de 'data segment'
existe depuis ... toujours ou presque.
> ok, je viens de lire aussi la partie du > site de emdel qui explique ça, c'est ok maintenant...
je connais pas m. emdel mais la notion de 'data segment' existe depuis ... toujours ou presque.
SF.
Coucou, c'est moi !
http://mapage.noos.fr/emdel/index.htm
A+
candide
Marc Espie a écrit :
In article <4990c458$0$3517$,
s = "xyz"; printf("%s",s);
return 0; }
0 warning 0 error et affichage correct abcdxyz
Par contre, ca n'est pas garanti afficher correctement, car ta derniere ligne ne finit pas par un n...
Tu fais allusion à la faq 14.6 ? Pourtant return 0 dans main() est équivalent à un appel de exit(0) lequel, à la différence de abort(), vide (au sens de la fonction flush()) les tampons des flux sortants, non ?
Marc Espie a écrit :
In article <4990c458$0$3517$426a74cc@news.free.fr>,
s = "xyz";
printf("%s",s);
return 0;
}
0 warning 0 error et affichage correct abcdxyz
Par contre, ca n'est pas garanti afficher correctement, car ta derniere
ligne ne finit pas par un n...
Tu fais allusion à la faq 14.6 ? Pourtant return 0 dans main() est équivalent à
un appel de exit(0) lequel, à la différence de abort(), vide (au sens de la
fonction flush()) les tampons des flux sortants, non ?
Par contre, ca n'est pas garanti afficher correctement, car ta derniere ligne ne finit pas par un n...
Tu fais allusion à la faq 14.6 ? Pourtant return 0 dans main() est équivalent à un appel de exit(0) lequel, à la différence de abort(), vide (au sens de la fonction flush()) les tampons des flux sortants, non ?
espie
In article <49949ebd$0$25553$, candide wrote:
Marc Espie a écrit :
In article <4990c458$0$3517$,
s = "xyz"; printf("%s",s);
return 0; }
0 warning 0 error et affichage correct abcdxyz
Par contre, ca n'est pas garanti afficher correctement, car ta derniere ligne ne finit pas par un n...
Tu fais allusion à la faq 14.6 ? Pourtant return 0 dans main() est équivalent à un appel de exit(0) lequel, à la différence de abort(), vide (au sens de la fonction flush()) les tampons des flux sortants, non ?
Oui, ce qui ne change rien au fait qu'il peut arriver des trucs a une ligne non complete.
Par exemple, sur un systeme Unix, tu n'as aucune garantie que ton shell ne se contente pas de remplacer ta jolie ligne par son invite...
In article <49949ebd$0$25553$426a74cc@news.free.fr>,
candide <candide@free.invalid> wrote:
Marc Espie a écrit :
In article <4990c458$0$3517$426a74cc@news.free.fr>,
s = "xyz";
printf("%s",s);
return 0;
}
0 warning 0 error et affichage correct abcdxyz
Par contre, ca n'est pas garanti afficher correctement, car ta derniere
ligne ne finit pas par un n...
Tu fais allusion à la faq 14.6 ? Pourtant return 0 dans main() est équivalent à
un appel de exit(0) lequel, à la différence de abort(), vide (au sens de la
fonction flush()) les tampons des flux sortants, non ?
Oui, ce qui ne change rien au fait qu'il peut arriver des trucs a une
ligne non complete.
Par exemple, sur un systeme Unix, tu n'as aucune garantie que ton shell
ne se contente pas de remplacer ta jolie ligne par son invite...
Par contre, ca n'est pas garanti afficher correctement, car ta derniere ligne ne finit pas par un n...
Tu fais allusion à la faq 14.6 ? Pourtant return 0 dans main() est équivalent à un appel de exit(0) lequel, à la différence de abort(), vide (au sens de la fonction flush()) les tampons des flux sortants, non ?
Oui, ce qui ne change rien au fait qu'il peut arriver des trucs a une ligne non complete.
Par exemple, sur un systeme Unix, tu n'as aucune garantie que ton shell ne se contente pas de remplacer ta jolie ligne par son invite...