问题
Possible Duplicate:
Is returning a string literal address from a function safe and portable?
“life-time” of string literal in C
Hello i am confused somewhat
char *func()
{
return "Hello";
}
Here "Hello" is sequence/array of characters. It is a local variable and it must vanish away as soon as the function returns. Then how come we are able to get the correct value?
回答1:
The "Hello" is a string literal and will exist for the lifetime of the program. To quote the relevant sections of the C99 standard:
- 6.4.5 String literals
...The multibyte character sequence is then used to initialize an array of static storage duration and length just sufficient to contain the sequence...
- 6.2.4 Storage durations of objects
An object whose identifier is declared with external or internal linkage, or with the storage-class specifier static has static storage duration. Its lifetime is the entire execution of the program and its stored value is initialized only once, prior to program startup.
The return value of the function should be const char* as an attempt to modify a string literal is undefined behaviour.
回答2:
It's constant and have constant address in memory.
回答3:
The function destroys the values only after returning the control.
So, By the time the return statement is encountered the "Hello" is placed to return value and then the function destroys the scope;
回答4:
take a look at this : Is returning a string literal address from a function safe and portable?
even if the string were deleted (local variable or dynmic allocation with malloc() and free()) , when you return a pointer, the value can be correct. but, this is an undifined behavior.
来源:https://stackoverflow.com/questions/12139002/scope-of-c-variables