使用结构和函数时在C中初始化字符数组

问题描述 投票:-1回答:2

我做了一个程序来理解结构的概念并从函数返回结构

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";

为什么会发生?我应该如何改变呢?

c function struct structure
2个回答
0
投票

这里:

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;


0
投票

有效

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()
{   
    struct student sheet1;
    sheet1=display();
    printf("Name:%s",sheet.name);
    printf("Age:%d",sheet.age);

}
© www.soinside.com 2019 - 2024. All rights reserved.