下面編譯給出的代碼段,並且當運行給出結果爲:奇怪指針問題
$ make
gcc -g -Wall -o test test.c
$ ./test
string
/* CODE1 */
#include<stdio.h>
char *somefunc1()
{
char *temp="string";
return temp;
}
int main(int argc,char *argv[])
{
puts(somefunc1());
return 0;
}
而輕微修改這個代碼給出不同的結果:
$ make
gcc -g -Wall -o test test.c
test.c: In function ‘somefunc1’:
test.c:5: warning: function returns address of local variable
$ ./test
/* code 2 */
#include<stdio.h>
char *somefunc1()
{
char temp[] ="string";
return temp;
}
int main(int argc,char *argv[])
{
puts(somefunc1());
return 0;
}
爲什麼會發生這種情況?
當然你可以想出比「奇怪指針問題」更好的標題。 – Eyal 2010-10-13 10:09:47