2016-10-06 3 views
0

(同様の質問がありましたが、答えは正しくありません) 警告はありません。しかし、値を入力すると、セグメント化エラーが表示されます。シンタックス&(struct_pointer-> struct_var)の構文でも構造体ポインタを使用していません

#include <stdio.h> 

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

PO *P[1000]; 

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

'PO P [1000]; ... のscanf( "%d個の%のC"、&P [0] .A、&P [0] .B)。 ' – BLUEPIXY

答えて

0
PO *P[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()を割り当てる必要があります。

このコードは動作するはず
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; 
} 
+0

Depends.Ifあなたは非常に多くの構造体とptrsを保持できる大きなスタックを持っている –

関連する問題