c程序在结构中使用时挂起

c程序在结构中使用时挂起,c,C,我正在尝试学习结构,下面的代码有一些错误,不是逻辑错误,只是在执行时显示,文件已停止工作。在获取(s2.name)之后立即发生 #包括 结构学生 { 字符*名称; 浮动标记1、标记2、标记3; 浮动总额; }; int main() { 结构学生s1、s2、s[3]; s1.mark1=6;s1.mark2=7;s1.mark3=8; s1.total=s1.mark1+s1.mark2+s1.mark3; printf(“\n输入s2的名称:”); 获取(s2.name); /*当插入上面的行

我正在尝试学习结构,下面的代码有一些错误,不是逻辑错误,只是在执行时显示,文件已停止工作。在获取(s2.name)之后立即发生

#包括
结构学生
{
字符*名称;
浮动标记1、标记2、标记3;
浮动总额;
};
int main()
{
结构学生s1、s2、s[3];
s1.mark1=6;s1.mark2=7;s1.mark3=8;
s1.total=s1.mark1+s1.mark2+s1.mark3;
printf(“\n输入s2的名称:”);
获取(s2.name);
/*当插入上面的行时,程序挂起,下面的代码不执行*/
puts(s2.名称);
s1.name=“香克利”;
puts(s1.名称);
getch();
返回0;
}

没有明显的编译错误。使用gcc编译器时,您忘记为结构的名称成员分配内存。它是一个指针,但除非你有一些内存,否则你不知道它指向哪里


尝试类似s2.name=malloc(80)的方法。确保检查返回值,并注意get()是不安全的。不要在生产代码中使用它。(或者更确切地说,根本不要使用gets()。

未定义的行为,用于在对象的值不确定时使用具有自动存储持续时间的对象的值。最好每行使用一条语句。i、 e.;->开始一条新线路。改为使用。
显然没有编译错误。
…是这样吗?@shanky您使用的是什么类型的编译器,是否启用了警告?
但除非您使用malloc()一些内存。
。将指针分配给另一个静态分配的变量如何?@SouravGhosh:这适用于一个结构变量;当不止一个这种类型的变量出现时,它很快就变得站不住脚了。
#include<stdio.h>
struct student
{
  char *name;
  float mark1,mark2,mark3;
  float total;
};
int main()
{
struct student s1,s2,s[3];
s1.mark1=6;s1.mark2=7;s1.mark3=8;
s1.total = s1.mark1+s1.mark2+s1.mark3;
printf("\nEnter the name of s2 : ");
gets(s2.name);
/*when above line is inserted program hangs and code below does not execute*/
puts(s2.name);
s1.name = "shanky";
puts(s1.name);
getch();
return 0;
}