gpt4 book ai didi

c - C 中的字符串结构变量赋值错误

转载 作者:行者123 更新时间:2023-12-04 09:33:25 24 4
gpt4 key购买 nike

请帮我看看这段代码。为什么将相同的名称分配给所有不同的结构?我对 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;
}

在控制台中运行:

enter image description here

编辑:添加学生结构

最佳答案

在这个声明中

students[n].name = name;

students数组所有元素的数据成员name获取局部变量name的相同地址。

您需要将结构的数据成员name声明为字符数组,并使用C标准函数strcpystrncpy来将局部变量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];
//…

注意函数gets是一个不安全的函数,C标准不支持。而是使用标准 C 函数 fgets

例如

#include <string.h>

//…

fgets( name, sizeof( name ), stdin );
name[strcspn( name, "\n" )] = '\0';

//…
strcpy( students[n].name, name );

关于c - C 中的字符串结构变量赋值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59863942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com