使用结构和函数时在 C 中初始化字符数组
Initiliasing a character array in C when using structures and functions
我编写了一个程序来理解结构和从函数返回结构的概念
struct student
{
char name[20];
int age;
char subject[20];
int marks;
int rollno;
}sheet;
struct student display()
{
sheet.name[20]="Swathi";
sheet.age=21;
sheet.subject[20]="Mathematics";
sheet.marks=85;
printf("Enter roll no.:");
scanf("%d",&sheet.rollno);
}
int main()
{
struct student sheet1;
sheet1=display();
printf("Name:%s",sheet.name);
printf("Age:%d",sheet.age);
}
我收到 2 条警告消息
warning: assignment makes integer from pointer without a cast [-Wint-conversion]
sheet.name[20]="Swathi";
warning: assignment makes integer from pointer without a cast [-Wint-conversion]
sheet.subject[20]="Mathematics";
为什么会这样?我应该如何改变这个?
这里是:
sheet.name[20]="Swathi";
只是获取 "Swathi"
的地址(只读),隐式将该地址转换为 char
(使其无用),然后将其分配给 sheet.name[20]
(这是越界的,所以是未定义的行为)。相反,试试这个:
strcpy(sheet.name, "Swathi");
与 sheet.subject[20]="Mathematics";
相同。另请注意,您的 struct student display()
没有返回任何内容,它应该是 void display()
并且不需要 struct student sheet1;
。
有效
struct student
{
char name[20];
int age;
char subject[20];
int marks;
int rollno;
}sheet;
struct student display()
{
strcpy(sheet.name, "Swathi");
sheet.age=21;
strcpy(sheet.subject,"Mathematics");
sheet.marks=85;
printf("Enter roll no.:");
scanf("%d",&sheet.rollno);
}
int main()
{
display();
printf("Name:%s",sheet.name);
printf("Age:%d",sheet.age);
}
我编写了一个程序来理解结构和从函数返回结构的概念
struct student
{
char name[20];
int age;
char subject[20];
int marks;
int rollno;
}sheet;
struct student display()
{
sheet.name[20]="Swathi";
sheet.age=21;
sheet.subject[20]="Mathematics";
sheet.marks=85;
printf("Enter roll no.:");
scanf("%d",&sheet.rollno);
}
int main()
{
struct student sheet1;
sheet1=display();
printf("Name:%s",sheet.name);
printf("Age:%d",sheet.age);
}
我收到 2 条警告消息
warning: assignment makes integer from pointer without a cast [-Wint-conversion]
sheet.name[20]="Swathi";
warning: assignment makes integer from pointer without a cast [-Wint-conversion]
sheet.subject[20]="Mathematics";
为什么会这样?我应该如何改变这个?
这里是:
sheet.name[20]="Swathi";
只是获取 "Swathi"
的地址(只读),隐式将该地址转换为 char
(使其无用),然后将其分配给 sheet.name[20]
(这是越界的,所以是未定义的行为)。相反,试试这个:
strcpy(sheet.name, "Swathi");
与 sheet.subject[20]="Mathematics";
相同。另请注意,您的 struct student display()
没有返回任何内容,它应该是 void display()
并且不需要 struct student sheet1;
。
有效
struct student
{
char name[20];
int age;
char subject[20];
int marks;
int rollno;
}sheet;
struct student display()
{
strcpy(sheet.name, "Swathi");
sheet.age=21;
strcpy(sheet.subject,"Mathematics");
sheet.marks=85;
printf("Enter roll no.:");
scanf("%d",&sheet.rollno);
}
int main()
{
display();
printf("Name:%s",sheet.name);
printf("Age:%d",sheet.age);
}