C言語なら俺に聞け(入門編)Part 105

このエントリーをはてなブックマークに追加
863デフォルトの名無しさん
struct Hoge
{
char *str;
};

struct Hoge make_struct( )
{
struct Hoge hoge;
hoge.str = "string"; // この文字列の有効範囲
return hoge;
}

int main( )
{
struct Hoge hoge = make_struct( );
printf("%s\n",hoge.str);
}


上記のようなコードで、make_struct( )内で str に代入している文字列の有効範囲は
make_struct( )内のみで
main( )で str を出力しても、"string" が出力される保証はない
と考えていますが、合っていますか?

例えば、
char tmp = "string";
hoge.str = (char*)malloc( strlen(tmp)+1 );
strcpy( hoge.str,tmp );
とすれば正しく動作するということでよいでしょうか?

よろしくお願いいたします。