一个关于C中结构体里使用指针的问题,求大神

2025-02-22 10:30:16
推荐回答(5个)
回答1:

结构体里int *num;没有指向故scanf("%s",fly[flynum].num);会出错,而scanf("%s",&fly[flynum].num); 为输入其地址,就不会出错,er你输入的地址很可能不是有效的地址,故 printf把fly[flynum].num打印出来会出错
把 int *num;改为int num;
scanf("%s",fly[flynum].num);改为scanf("%s",&fly[flynum].num);
就对了;

回答2:

typedef struct flight
{
char num[20];
char st[20];
char ed[20];
char flytm[20];
int sttm;
int edtm;
char style[20];
int price;
}flight;

这样就行了, scanf或printf都行, 将数据存放在栈上.

或者将数据放在堆上,你也可以手动fly[flynum].num = (char*) malloc(20);scanf("%s",fly[flynum].num);printf("%s", fly[flynum].num);就可以

回答3:

你的 num 没有初始化,我猜默认初始化为 NULL 了,这里当然是不能写入的。

即使可以写入,最好也是写成字符数组的形式,因为指针只指向一个地址,后面的内存能否使用是未知的

回答4:

指针不是用来存放字符串的
是用来存放字符串的地址的
所以 想存放字符串 请 定义数组!

回答5:

输入还是要加地址运算符号的;scanf("%s",&fly[flynum].num);
输出的时候需要加*运算符:printf("%s",*fly[flynum].num);