繁体   English   中英

结构数组和malloc [C]

[英]array of structs and malloc [C]

我对此代码有疑问。 我想编写一个在数组中具有各种个人信息的程序。 我想在内存(malloc)的一个位置设置15个数组。 程序也应根据请求输出一个人的个人信息(printf)(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的单个实例)的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);
}

您似乎有两个问题。 首先,在您的print_angestellter()函数中,您使用了全局angestellter结构,这非常好。 但是,它是一个struct ,而不是一个数组或指向内存的指针。 因此,您不能使用运算符[] ,因此会出现错误。 看来您将不得不重新设计print_angestellter()或使angestellter成为struct angestellter的数组。 您在main()也犯了类似的错误,做了angestellter[0]而不是db[0] 为了解决这个问题,我建议在print_angestellter()添加一个指针参数,比如说使其成为print_angestellter(int, struct *angestellter a)然后将angestellter[0]替换为a[0] 您还可以使用=复制字符串,但是复制指针地址, 而不是字符串的内容。 请改用strcpy()

您写了“ struct angestellter ** db = malloc(sizeof(angestellter)* 15);”表示数组的指针,可以,但是您应该使用“ db [0]-> number”代替“ angestellter [0]-> nummer“;函数” void print_angestellter()“,应在使用” malloc“时添加形式参数” dp“,不要忘记使用” free“释放您申请的内存;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM