文字列を返り値にする

文字列リテラルを返却する場合は静的なので問題ないんだけど、
(Char型への)ポインタであるローカル変数を返却しようとするとエラーが出る。
関数が呼ばれた後に、ローカル変数が破棄されていることが原因らしい。
こういうときにmallocを使う。
http://www-ui.is.s.u-tokyo.ac.jp/~tera1984/dat/struct.txt

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *msg(void){
  return "Hello\n";
}

char *msg2(void){
  char *hoge = (char *)malloc((size_t) 10); //メモリを確保
  strcpy(hoge,"Hello\n");
  return hoge;//呼び出し後に破棄されるのでアドレスを渡せない
}

int main(void){
  char *str = msg();  
  printf(str);
  char *str2 = msg2();  
  printf(str2);
  free(str2);//メモリを解法

  return 0;
}