,用C语言写一个记事本,遇见两个有关问题

求助,用C语言写一个记事本,遇见两个问题。
问题一:运行后读出的文字是乱码的,最先没有用malloc申请内存,而是直接定义一个字符数组,则没有乱码。用malloc的话怎么解决?

问题二:怎么写多行记事本,现在只能读一行。
谢谢!
  
  switch(id)
  {
  case ID_MENUITEMOPEN:
{
if (GetOpenFileName(&ofn))
{
FILE *fp= fopen(szFile,"r");
char *str=(char*)malloc(sizeof(char)*80);
fgets(str,sizeof(str),fp);
SetDlgItemText(hwnd,IDC_EDIT1,str);
fclose(fp);
free(str);
}

}
  break;
  default:
break;
  }

------解决方案--------------------
fgets(str,sizeof(str),fp);
这句话有问题
sizeof(str)的返回值是4。把它改成sizeof(char)*80
------解决方案--------------------
sizeof(str),改为sizeof(char)*80