如何在C中使用指针在结构类型数组中获取字符串输入

如何在C中使用指针在结构类型数组中获取字符串输入,c,arrays,string,pointers,structure,C,Arrays,String,Pointers,Structure,当我运行此代码并尝试在结构类型数组中输入第一个字符串时,程序停止。但我的代码似乎没有错误。我现在能做什么?我使用Code::Blocks和GCC编译器。 * #包括 void main() { int i,串行,n=4; 体类型 { 字符*名称; 字符*id; 学期内; 智力年龄; 浮动cgpa; }; 结构学生stuArr[n]; 对于(i=0;i=12) { printf(“%s在上学期。\n”,stuArr[i].name); } } 平均cgpa=总cgpa/10.0; printf(“

当我运行此代码并尝试在结构类型数组中输入第一个字符串时,程序停止。但我的代码似乎没有错误。我现在能做什么?我使用Code::Blocks和GCC编译器。

*

#包括
void main()
{
int i,串行,n=4;
体类型
{
字符*名称;
字符*id;
学期内;
智力年龄;
浮动cgpa;
};
结构学生stuArr[n];
对于(i=0;i=12)
{
printf(“%s在上学期。\n”,stuArr[i].name);
}
}
平均cgpa=总cgpa/10.0;
printf(“%d名学生的平均CGPA:%0.2f\n”,n,平均CGPA);
}

*您的学生姓名和id分配不正确,它们是未初始化的指针

您可以使用malloc手动分配它们,也可以在结构中定义它们,如下所示:

struct Student
{
    char name[32];
    char id[32];
    int semester;
    int age;
    float cgpa;
};

您必须为字段分配内存,因为它们是
char*
。或者定义实数组。
&stuArr[i]的类型。name
char**
,而不是
char*
(指针占用的内存本身用作字符串的存储目标。)和
stuArr[i]。name
不是它的单独名称。
scanf(%s,&stuArr[i].name)应该是
scanf(“%s”,stuArr[i].name)-只有非字符串才需要指向存储值的变量的指针。是否可以使其保持未初始化状态,以避免指定字符串的长度?
struct Student
{
    char name[32];
    char id[32];
    int semester;
    int age;
    float cgpa;
};