c语言空txt文件读出乱码

新建的空的txt文件,读取telephone.txt到链表,显示所有信息时读出的是一堆乱码,但是txt文件里没有存放任何数据。
/*读取telephone.txt文件中的内容创建学生链表*/
ID* create()
{
ID head;
ID *p1,*p2;
p2 = (ID
)malloc(LENTEL);
head = p2;

FILE *fp;
if((fp = fopen("telephone.txt","r")) == NULL)
{
       printf("联系人文件打开错误,请将telephone.txt放置与程序同一目录下!\n");
       exit(0);
}


while(!feof(fp))
{
    p1 = (ID*)malloc(LENTEL);
    fscanf(fp,"%s%s%s%s\n",p1->name,p1->tele,p1->style,p1->mail);
    p1->next = NULL;
    p2->next = p1;
    p2 = p1;
}

fclose(fp);
return head;

}

//显示所有联系人
void Print_Inquire_All()
{
void menu_print_out();
ID *p1 = id->next;
menu_print_out();
printf("姓名 电话 分类 邮箱\n");
while (p1!=NULL)
{
printf("%s\t%s\t%s\t%s\n",p1->name,p1->tele,p1->style,p1->mail);
p1 = p1->next;
}

system("pause");            

}

你会的啥编译器,是不是Unicode编码的问题

申请的内存,请先清零。

用memset清空一下malloc的空间.
补充代码如下.
如果仍有问题,请回复

while(!feof(fp))
{
    p1 = (ID*)malloc(LENTEL);
        memset(p1,0,LENTEL);//这里加上这句话
    fscanf(fp,"%s%s%s%s\n",p1->name,p1->tele,p1->style,p1->mail);
    p1->next = NULL;
    p2->next = p1;
    p2 = p1;
}