[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux-team] Question C et Linux
Ludovic Kuty wrote:
>
> Eric Darchis wrote:
> >
> > Hello !
> >
> > J'ai une question difficile de C sur Linux. Considerons le programme suivant:
> > /*** testeda.c ***/
> > #include <stdio.h>
> >
> > main()
> > {
> > char *ptr="Hello";
> > ptr[0]='P';
> > }
> > /**************/
> >
> > Ce programme marche sur Windows ainsi que sur la plupart des Unix que j'ai
> > testes (Sinix, AIX, NCR, ...) sauf sur Linux. Sous Linux, j'ai un
> > segmentation fault.
> >
> > Ceci dit, c'est normal. ptr est un pointeur. Ce pointeur est dans le
> > segment de donnees et pointe sur une chaine dans le segment de code. Et le
> > segment de code est cense etre read-only... D'ou l'erreur. Dans ce
> > programme de test, il suffit de declarer char ptr[]="Hello" pour que la
> > string soit allouee dans le segment de data mais dans le cadre du portage
> > d'un certain soft, ce n'est pas utilisable.
> >
> > La question est: est-il possible de forcer GCC (ou egcs) a permettre ce
> > genre de chose ?
>
> Si tu compiles avec l'option '-traditional', il n' y a plus de probleme.
> Mais cependant le livre de reference de Kernighan et Ritchie specifie
> que le resultat de ce genre d'affectation (chaine constante) est indefini.
>
> Ludovic Kuty.
L'option qui permet de faire exactement ce que tu demandes est '-fwritable-strings' ce qui
permet ceci (doc de gcc):
-traditional
Attempt to support some aspects of traditional C compilers. Specifically:
(...)
String "constants" are not necessarily constant; they are stored in writable space,
and identical looking constants are allocated separately.
(This is the same as the effect of `-fwritable-strings'.)
J'espere que cela te convient.
Ludo.
---------
This message was send by Majordomo 1.94.3. Please repport problems to
manu@rtfm.be. If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.