2016-07-28 30 views
0

私はこのコードに問題があります。私は、配列内にさまざまな個人情報を持つプログラムをコーディングしたいと思います。そして、私は15個の配列をメモリ(malloc)の1つの場所に設定する必要があります。 また、プログラムは、リクエスト(angestellter [0 - 14])に応じて一人の個人情報を出力(printf)する必要があります。私はrecive構造体の配列とmalloc [C]

コードエラーは次のとおりです。

gcc ANGDB.c 
ANGDB.c: In function ‘print_angestellter’: 
ANGDB.c:14:18: error: subscripted value is neither array nor pointer nor vector 
nu = angestellter[x].nummer; 
       ^
ANGDB.c:15:18: error: subscripted value is neither array nor pointer nor vector 
vn = angestellter[x].vorname; 
       ^
ANGDB.c:16:18: error: subscripted value is neither array nor pointer nor vector 
nn = angestellter[x].nachname; 
       ^
ANGDB.c: In function ‘main’: 
ANGDB.c:25:13: error: subscripted value is neither array nor pointer nor vector 
angestellter[0] -> nummer = 1; 
      ^
ANGDB.c:26:13: error: subscripted value is neither array nor pointer nor vector 
angestellter[0] -> vorname = "George"; 
      ^
ANGDB.c:27:13: error: subscripted value is neither array nor pointer nor vector 
angestellter[0] -> nachname = "Washington"; 

これは私のコードです:

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

struct angestellter{ 
    int nummer; 
    char vorname[50]; 
    char nachname[50]; 
}angestellter; 

void print_angestellter(int x){ 
    int nu; 
    char vn[50]; 
    char nn[50]; 
    nu = angestellter[x].nummer; 
    vn = angestellter[x].vorname; 
    nn = angestellter[x].nachname; 
    printf("%d, %s, %s\n", nu, vn, nn); 
} 

int main(){ 
    struct angestellter **db = malloc(sizeof(angestellter)*15); 
    angestellter[0] -> nummer = 1; 
    angestellter[0] -> vorname = "George"; 
    angestellter[0] -> nachname = "Washington"; 
    print_angestellter(0); 
} 
+4

'angestellter'は' struct angestellter'型の変数です。あなたはそれに下付き文字を使うことはできません。 –

+1

メモリを割り当ててdbという名前の変数に割り当てるようです。あなたはangestellterの代わりにdbを使うべきですか? – bruceg

答えて

1

の単一インスタンスであるangestellterを使用している場合は、動的に割り当てられた配列であるdbを使用する必要があります。 struct angestellter **ではなく、struct angestellter *と宣言する必要があります。これもprint_angestellterに渡す必要があります。

また、strcpyを使用して文字列をコピーする必要があります。文字列に文字列を直接割り当てることはできません。

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

struct angestellter{ 
    int nummer; 
    char vorname[50]; 
    char nachname[50]; 
}; 

void print_angestellter(struct angestellter *db, int x){ 
    int nu; 
    char vn[50]; 
    char nn[50]; 
    nu = db[x].nummer; 
    strcpy(vn, db[x].vorname);  // use strcpy to copy strings 
    strcpy(nn, db[x].nachname); 
    printf("%d, %s, %s\n", nu, vn, nn); 
} 

int main(){ 
    struct angestellter *db = malloc(sizeof(struct angestellter)*15); 
    db[0].nummer = 1; 
    strcpy(db[0].vorname, "George"); 
    strcpy(db[0].nachname, "Washington"); 
    print_angestellter(db, 0); 
} 
+0

これは正解です。どうもありがとうございました! – asdasdasd1234

+0

'print_angestellter'はstructメンバーを直接渡すことができます:' printf( "%d、%s、%s \ n"、db [x] .nummer、db [x] .vorname、db [x] .nachname); ' – chqrlie

0

次の2つの問題を持っているようです。まず、print_angestellter()関数では、グローバルangestellter構造体を使用します。これは完全にうまくいきます。ただし、構造体であり、メモリへの配列またはポインタではありません。したがって、オペレータ[]を使用することはできません。そのため、エラーが発生します。 print_angestellter()を再設計するかangestellterstruct angestellterの配列を作成する必要があります。 main()でも同様の誤りがあり、db[0]の代わりにangestellter[0]を実行しました。これを修正するには、print_angestellter()にポインタ引数を追加することをお勧めします。print_angestellter(int, struct *angestellter a)とし、angestellter[0]a[0]に置き換えてください。 また、=を使用して文字列をコピーすると、ではなく、という文字列の内容がコピーされます。代わりにstrcpy()を使用してください。

0

あなたは、 "構造体angestellter **デシベル= malloc関数(はsizeof(angestellter)* 15);" を書いた配列のポインタ、その[OK]を意味していますが、使用する必要があります - 交換する "DB [0]>番号を" "angestellter [0] - > nummer";関数 "void print_angestellter()"は、仮引数 "dp"を追加する必要があります。 "malloc"を使うときは、 "free"

+0

ようこそStackOverflowへ。 [** MarkdownまたはHTMLを使用して投稿をフォーマットするにはどうすればいいですか?**](http://stackoverflow.com/help/formatting)を参照すると、コードで読みやすくなるように回答をフォーマットできます一般的なテキストと区別することができます。 –