What is the difference between char *str and char str[] ?

Martin Kahlert martin.kahlert@infineon.com
Wed Apr 25 08:07:00 GMT 2001


On Wed, Apr 25, 2001 at 04:04:13PM +0200, Markus Virtanen wrote:
> 
> I have a small test program that causes seg fault if 
> I define a string as: char *test = "some text";
> and pass that string to a function that manipulates it. 
> However if I define it as char test[] = "some string"; 
> everything works fine.
> 
> Again some detail I didn't learn at University?

Hi Markus

test[] = "some string" 
initializes the the array test with 12 Bytes (the string and a trailing 0)
on the stack.

char *test = "some text";
puts the string "some text" (and the trailing 0) into the nonwritable section
and sets the pointer test to its beginning. It allocates only sizeof(char*) on
the stack.
You should have got a warning from gcc, but i do not get one, either
(gcc -Wall -O).

Microsoft's compiler gives an incompatible pointer assignment warning IIRC
(pointer to const char cannot be assigned to pointer to char).

Try: gcc -fwritable-strings.

Hope that helps,
Martin.

-- 
The early bird gets the worm. If you want something else for       
breakfast, get up later.



More information about the Gcc-bugs mailing list