我对此代码有疑问。我想编写一个在数组中具有各种个人信息的程序。我希望在内存(malloc)的一个位置设置15个数组。
程序也应根据要求输出一个人的个人信息(打印)(angestellter [0-14])。
我收到的代码错误如下:
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);
}
最佳答案
在使用angestellter
(它是struct 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);
}