p指针为什么不能给element的name,id,这些初始化

img


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct student
{
char name[20];
char id[12];
char sex[5];
int age;
};
typedef struct student DataType;

struct SeqList
{
int max;
int n;
DataType *element;
};
typedef struct SeqList *PSeqList;

//创建空顺序表
PSeqList create(int m)
{
PSeqList plist = (PSeqList)malloc(sizeof(struct SeqList));
if(plist!=NULL)
{
plist->element = (DataType *)malloc(sizeof(struct student)*m);
if(plist->element)
{
plist->max=m;
plist->n=0;
return plist;
}
else free(plist);
}
printf("Out of space\n");
return NULL;
}

int main()
{
PSeqList p;
p=create(10);
printf("姓名 学号 性别 年龄\n");
p->element[0].name="张三",p->element[0].id="12020242562",p->element[0].sex="男",p->element[0].age=20;
printf("%s %s %s %d",p->element[0].name,p->element[0].id,p->element[0].sex,p->element[0].age);
}

p->element[0].name="张三",p->element[0].id="12020242562",p->element[0].sex="男"这样不行,改为:
strcpy(p->element[0].name,"张三");
strcpy(p->element[0].id,"12020242562");
strcpy(p->element[0].sex,"男");

1.你的create函数中,可能return NULL,如果p是NULL,p->element[0]这么用的时候就会报错。
2.字符数组赋值,不能直接用等号
p->element[0].name="张三"这么写是错误的,改成:
strcpy(p->element[0].name,"张三");

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
    const char *name;
    const char *id;
    const char *sex;
    int age;
};
typedef struct student DataType;

struct SeqList
{
    int max;
    int n;
    DataType *element;
};

typedef struct SeqList *PSeqList;

//创建空顺序表
PSeqList create(int m)
{
    PSeqList plist = (PSeqList)malloc(sizeof(struct SeqList));
    if (plist != NULL)
    {
        plist->element = (DataType *)malloc(sizeof(struct student) * m);
        if (plist->element)
        {
            plist->max = m;
            plist->n = 0;
            return plist;
        }
        else
            free(plist);
    }
    printf("Out of space\n");
    return NULL;
}

int main()
{
    PSeqList p;
    p = create(10);
    printf("姓名 学号 性别 年龄\n");
    p->element[0].name = "张三";
    p->element[0].id = "12020242562";
    p->element[0].sex = "男";
    p->element[0].age = 20;
    printf("%s %s %s %d", p->element[0].name, p->element[0].id, p->element[0].sex, p->element[0].age);
    return 0;
}