URL: https://linuxfr.org/forums/programmation-c--2/posts/chaines-constantes Title: Chaines constantes... Authors: JaguarWan Date: 2004年11月25日T21:09:40+01:00 Tags: Score: 0 Bonjour à tous :) J'aimerais avoir une réponse définitive à une question idiote qui me taraude depuis quelque temps. D'abord un petit code d'exemple : hello.c : -------------------------8<--------------------------------- #define CHAINE1 "coin coin !\n" #define CHAINE2 "pan !\n" int main(int argc, char **argv) { char *sChaine = NULL; if (argc > 1) { sChaine = CHAINE1; } else { sChaine = CHAINE2; } printf(sChaine); return 0; } -------------------------8<--------------------------------- Maintenant sa sortie, qui me semble en concordance avec le code. jaguarwan@Jaguar:~$ gcc -Wall -ansi -pedantic hello.c -o gruik jaguarwan@Jaguar:~$ ./gruik a coin coin ! jaguarwan@Jaguar:~$ ./gruik pan ! Toute se passe bien, gcc ne m'insulte pas, le comportement est apparemment fiable. Pourtant, on m'a dit que cela ne se faisait pas car "les chaînes n'étaient pas allouées et qu'en plus j'affectait la chaîne directement à un pointeur". J'ai personnellement l'impression que le compilateur affecte simplement l'adresse de la chaîne constante (qu'il a alloué où bon lui semble) à mon pointeur, me permettant de l'afficher par la suite. Qu'en pensez-vous ? Si vous pouviez me donner une URL avec l'explication détaillée de ce phénomène, je vous serais très reconnaissant :) P.S: (oui je sais, printf(CHAINEx); ça marche bien mais là n'est pas la question :)

AltStyle によって変換されたページ (->オリジナル) /