(有一个类似的问题,但给出的答案不起作用) 没有警告。但输入值后,会出现分段错误。
#include <stdio.h>
typedef struct
{
int a;
char b;
}PO;
PO *P[1000];
int main()
{
scanf("%d%c",&(P[0]->a),&(P[0]->b));
}
答案 0 :(得分:0)
PO *P[1000];
定义了一个包含1000个指针到PO
结构的数组。
写得那样可能会更清楚:
PO* P[1000]; // <-- P is an array of 1,000 pointers to PO
你可能想要的是一个预分配的结构数组,而不是那些指针,例如:
PO Data[1000];
在这种情况下,您可以使用以下代码读取数据:
scanf("%d%c", &(Data[0].a), &(Data[0].b));
或者,如果你仍然想要一个指针数组,你应该使用malloc()
分配每个结构,然后在使用后分配free()
。
答案 1 :(得分:0)
此代码应该有效:
typedef struct
{
int a;
char b;
}PO_t;
int main(void)
{
unsigned int i=0;
PO_t PO[1000]; //create a 1000 struct of the type PO
PO_t* ptr[1000]; //create 1000 pointers to struct of type PO_t
for(i=0;i<1000;i++)
{
ptr[i]=&PO[i]; //or ptr[i]=&PO[0] if you want 1000 pointers to a single struct
}
for(i=0;i<1000;i++)
{
scanf("%d%c\n",&(PO[i].a),&(PO[i].b));
}
for(i=0;i<1000;i++)
{
printf("%d%c\n",ptr[i]->a),ptr[i]->b));
}
return 0;
}