#include <stdio.h>
char* fun1()
{
char *s="hello";
return s;
}
char* fun2()
{
char s[6]="hello";
return s;
}
main()
{
char *str;
str = fun1();
printf("%s",str);//hello
str = fun2();
printf("%s",str);//garbage value
}
コードの出力は、hello とゴミです。fun1 と fun2 の両方の変数がそれぞれの関数に対してローカルであるにもかかわらず、出力がそのようになる理由を理解していません。両方の関数呼び出しはローカル変数のアドレスを返し、返されるアドレスには fun1 の場合には当てはまらないガベージ値が含まれている必要があります。 「こんにちは」を印刷しています。