BUG in function parameter passing ??????

Jeff Sturm jsturm@sigma6.com
Fri Aug 28 14:37:00 GMT 1998

Charles G Waldman wrote:
> Mark.Koennecke@psi.ch writes:
>  >
>  > int main(int argc, char *argv[])
>  > {
>  >   char pBuffer[132];
>  >
>  >   /* why does this work? */
>  >   strcpy(pBuffer,"Hello You");
>  >   strtolower(pBuffer);
>  >
>  >   /* but this gives a segmentation violation under Cygwin*/
>  >   strtolower("Hello You");
>  >
> Because the string "Hello You" is a constant, and is allocated in the
> read-only segment of the executable.  The buffer pBuffer is allocated
> read/write.   This is done so that storage for literal strings can be
> shared between object files.

It's also for sharing string constants within an object file.  If you
compile the example with -fwritable-strings the constant "Hello You"
will appear twice, otherwise just once.

Modifying string constants is bad programming style and forbidden by the
C spec, I think.  I don't understand why gcc -Wall doesn't emit a
warning when assigning a string constant to a non-constant parameter. 
This code fragment will emit a warning on the 2nd call to strtolower(),
but no the first:

  int main(void) {
    const char *c = "Hello You";
    strtolower("Hello You");    /* no warning */
    strtolower(c);              /* gcc warns here */

Jeff Sturm
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".

More information about the Cygwin mailing list