-1

このコードが機能しない理由がわかりましたか?

#include <stdio.h>

char* get_name()
{
    char string[4];

    string[0] = 'A';
    string[1] = 'N';
    string[2] = 'A';
    string[3] = '\0';

    return string;
}


int main()
{
    char *name = get_name();

        printf("%s \n", name);

        return 0;
}

ありがとうございました。

4

2 に答える 2

8

すぐにスコープ外になる変数へのポインターを返すため、コードは失敗します。ローカル変数へのポインタを返しています。ローカル変数には、関数が戻るときに終了するスコープがあります。そのため、スコープが終了した後でそれらを参照しようとするとエラーになります。

malloc文字列を割り当てるために使用する必要があります。そうすれば、関数の終了後も有効期間が続くオブジェクトを割り当てることができます。

char* get_name()
{
    char *string = malloc(4);
    strcpy(string, "ANA");
    return string;
}

mallocへのすべての呼び出しを への呼び出しと一致させる必要があることに注意してくださいfree

char *name = get_name();
printf("%s \n", name);
free(name);

また、簡単にするために、ここではエラー チェックを省略しました。

于 2013-02-22T17:06:44.807 に答える
1

stringローカル変数です。から戻るとget_name、この変数はもう存在しません。

于 2013-02-22T17:07:01.983 に答える