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

chaines de caractères

3 réponses
Avatar
AG
Salut à tous,

Une petite question :

si je mets :

static char const monfichier_c[]="blablabla";


dans monfichier.c

quand je compile et que je lie, est-ce que je peux avoir la garantie que
la chaine de caractère "blablabla" va se retrouver dans mon executable ?

C'est à dire que si j'édite mon executable avec un éditeur de texte, je
retrouverais quelque part la chaine "blablabla" ?

Et si non pourquoi ?

Alexandre.

3 réponses

Avatar
Antoine Leca
En , AG va escriure:
static char const monfichier_c[]="blablabla";
dans monfichier.c

quand je compile et que je lie, est-ce que je peux avoir la garantie
que la chaine de caractère "blablabla" va se retrouver dans mon
executable ?


Non.

Et si non pourquoi ?


Parce que le compilateur a le droit d'être intelligent, de s'apercevoir que
la chaîne n'est pas utilisée dans monfichier.c (et ne peut pas l'être
ailleurs), et donc qu'il peut très bien gagner de la place en ne la stockant
pas dans l'exécutable.


À moins bien sûr que tu ne l'utilises, par exemple en initialisant un
pointeur avec, ou en la renvoyant comme résultat d'une fonction.

Un autre truc qui marche parfois, mais n'est pas garanti, c'est de déclarer
la chaîne volatile en plus de tout ce que tu as mis (voire à la place de
const !)


Antoine

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', AG wrote:

si je mets :

static char const monfichier_c[]="blablabla";

dans monfichier.c

quand je compile et que je lie, est-ce que je peux avoir la garantie que
la chaine de caractère "blablabla" va se retrouver dans mon executable ?


La garantie, non, car le langage C ne spécifie pas le format des
exécutables, mais une forte probablilité, oui.

C'est à dire que si j'édite mon executable avec un éditeur de texte, je
retrouverais quelque part la chaine "blablabla" ?


C'est probable, mais si tu es sous MS-DOS (et assimilés) ...

"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.0)
Gecko/20020530"

... il vaut mieux un éditeur cabaple de lire du binaire, pour qu'il ignore
une éventuelle marque de fin de fichier non désirée (un code 0x26, ça peux se
trouver dans n'importe quel exécutable...)

Et si non pourquoi ?


Euh, tu as le cas? Mets l'exécutable sur une serveur avec une url, qu'on
aille voir (et peut être se prendre un virus de la mort qui tue)... Même pas
peur!

--
-ed- get my email here: http://marreduspam.com/ad672570
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
AG
Emmanuel Delahaye wrote:
Et si non pourquoi ?



Euh, tu as le cas? Mets l'exécutable sur une serveur avec une url, qu'on
aille voir (et peut être se prendre un virus de la mort qui tue)... Même pas
peur!


Non non, je n'ai pas le cas. Je cherchais juste un méthode déterministe
pour pouvoir retrouver la liste des fichiers, ainsi que leur version,
utilisés pour compiler un executable, à partir de celui-ci.

j'ai la réponse à ma question.