On Wed, Mar 25, 2009 at 9:21 AM, 明亮 <longapple@xxxxxxxxx> wrote: > Hi guys, > > This is my first email in this list, any help is much appreciated. > As I know, it's not allowed to pass a local variable to a function, > because the stack where local variable resides will be reused by other > functions. > eg: > 1 #include <stdio.h> > 2 > 3 char *fetch(); > 4 > 5 int main(int argc, char *argv[]){ > 6 char *string; > 7 string = fetch(); > 8 printf("%s\n", string); > 9 exit(0); > 10 } > 11 > 12 char *fetch(){ > 13 char string[10]; > 14 scanf("%s", string); > 15 return string; > 16 } > > When the application is executed, after input "a", it will produce > unknown characters, like "8Šè¿ôÿO". Which is like what I expect > > However, if I change line 13 to: > 13 char string[1024]; > > When I type "a", it echos "a", which is out of my expectation > > Why does it behave like this? > > Thanks in advance, > longapple The data for string[] is being destroyed by the call to printf (first thing you call after fetch). On your particular system making it 1024 puts it out of reach of printf's call frame. your stack is probably growing downwards, so the call frame of printf is ending up near the end of what string[] used to be. If you fill your string[] with memset of 'a' and leave not null terminated, you can easily see the point where your data ends and the next function starts to clobber you. -- Jon Mayo <jon.mayo@xxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html