在scanf中使用结构指针即使使用语法&(struct_pointer-> struct_var)也不起作用

时间:2016-10-06 10:02:31

标签: c struct scanf

(有一个类似的问题,但给出的答案不起作用) 没有警告。但输入值后,会出现分段错误。

#include <stdio.h>

typedef struct
{
  int a;
  char b;
}PO;

PO *P[1000];

int main()
{
  scanf("%d%c",&(P[0]->a),&(P[0]->b));
}

2 个答案:

答案 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;
}