On 5/13/09 Wed  May 13, 2009  4:48 AM, "Michael Alipio"
<daem0n...@yahoo.com> scribbled:

> I have a c code that looks like this:
> 
> #include<stdio.h>
> 
> main (){
> char girl[] = "anna";
> char boy[] = "jude";
> stringcopy(boy, girl); /* copy boy to girl */
> printf("%s", girl);
> 
> }
> 
> void stringcopy(char *b, char *g){
> 
> while ((*g++ = *b++) != '\0')
> ;
> }
> 
> 
> It prints fine...
> However if I replace the stringcopy call arguments with "jude", "anna"
> it compiles fine but i get segmentation fault when running.
> 
> 
> How come printf can accept variable names as well as constant strings such as:
> 
> printf ("%s", girl);
> 
> and
> 
> printf ("Hello World\n");

Because printf does not attempt to change its arguments.

> My stringcopy function only accepts pointers. Shouldn't I be passing pointer
> to the first element of "anna" when passing the string constant "anna"?? )

stringcopy modifies its second argument. Your compiler is not letting you
modify a string "constant". That way, different parts of your program can
share the same string constant without one part being affected by what
another part does.

> How does printf print a string constant then?

Easily, because it does not attempt to modify it.

May I ask you a question? Why are you posting C questions to a Perl mailing
list?



-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to