This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: BUG in function parameter passing ??????


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
jsturm@sigma6.com
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]