1

このコードを実行すると、正常に動作string constantし、画面に出力されます。

char *someFun(){
    char *temp = "string constant";
    return temp;
}
int main(){
    puts(someFun());
}

しかし、次の同様のコードを実行すると、機能せず、画面にゴミが表示されます。

char *someFun1(){
    char temp[ ] = "string";
    return temp;
}
int main(){
    puts(someFun1());
}

その背後にある理由は何ですか?基本的に、どちらの関数も同じことを行います (つまり、「文字列」を返します) が、動作は異なります。何故ですか?

4

2 に答える 2

3

最初のケースでは、ポインターtempは を格納するグローバル定数を指します"string constant"。したがって、ポインターを返すと、それは有効になります。

2 番目のケースでは、'"string"' はスタック上の単なる char 配列であり、関数から戻った後に消滅します。

于 2011-09-17T06:10:57.890 に答える