Sum*_*mit 2 c arrays struct pointers c-strings
请帮我处理这个代码。为什么将相同的名称分配给所有不同的结构?我是 C 中指针和数组的菜鸟。
struct student
{
char *name;
int reg_no;
};
typedef struct student student;
int main()
{
char choice = 'y';
char name[30];
int rg;
student students[5];
int n = 0;
while(choice != 'n')
{
printf("enter student's name\n>>");
gets(name);
printf("enter student's reg_no\n>>");
scanf("%d",&rg);
getchar();
students[n].name = name;
students[n].reg_no = rg;
printf("enter details of more students (y/n)\n>>");
scanf("%c",&choice);
getchar();
n++;
}
for(int i=0;i<n;i++)
{
printf("Details of student%d :\n",(i+1));
printf("Name : %s\n",students[i].name );
printf("Reg no. : %d\n\n",students[i].reg_no );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在控制台中运行:
编辑:添加学生结构
在这份声明中
students[n].name = name;
Run Code Online (Sandbox Code Playgroud)
name数组students 中所有元素的数据成员获取局部变量的相同地址name。
您需要name将结构的数据成员声明为字符数组,并使用 C 标准函数strcpy或strncpy将局部变量的内容复制name到数据成员name。
例如
#define N 30
struct student
{
char name[N];
int reg_no;
};
typedef struct student student;
int main( void )
{
char choice = 'y';
char name[N];
//…
Run Code Online (Sandbox Code Playgroud)
请注意,该函数gets是不安全的函数,C 标准不支持。而是使用标准的 C 函数fgets。
例如
#include <string.h>
//…
fgets( name, sizeof( name ), stdin );
name[strcspn( name, "\n" )] = '\0';
//…
strcpy( students[n].name, name );
Run Code Online (Sandbox Code Playgroud)