Сегмент кода, приведенный ниже, компилируется и при запуске дает результат в виде:
$ 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;
}
Почему это происходит?