[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.