如何在C中的结构数组中访问struct成员

时间:2017-03-16 04:12:32

标签: c struct

我有一个结构数组,我用来获取某个成员,我遇到的问题是我只想访问结构的特定成员,而不是整个结构本身。 所以例如如果我的结构声明如下:

static _Plyr {
 char*  firstName; 
 int age; 
 char* lastName;
}

typedef struct _Plyr Player; 

我有一张桌子...... e..g

static Player Table[NUM] = {
{"John", 24,  "Wall"}, 
{"Carmelo", 33,  "Anthony"}, 
....
}

我希望有一个功能可以根据他们的名字返回一个人的姓氏。所以我有一个* char函数,我知道如何获取整个结构但我只想在这种情况下从特定结构中获取某个成员,他们的姓氏......所以我需要修复我的return语句

我的部分代码

char* getLastName(char* string){
 char* first;
 for (int i = 0; i < REGCOUNT; i++){
    first = Table[i].firstName;
    if (strcmp(first, str) == 0){
        return &Table[i].lastName;
    }
  }
}

我试过Table[i].lastName, Table[i]->lastName, ......似乎都没有用。我知道&Table[i]给了我结构本身的地址,然后我可以从那里访问它,但我只想让成员自己而不是整个结构。谢谢你的时间

2 个答案:

答案 0 :(得分:0)

检查以下代码,

typedef struct _Plyr {
    char*  firstName;
    int age;
    char* lastName;
} Player; /* typedef structure  _Plyr into  Player*/


static Player Table[] = { /* Table with NUM of items*/
        {"John", 24,  "Wall"},
        {"Carmelo", 33,  "Anthony"},
        ---------------------------
        ---------------------------
};

#define NUM (sizeof(Table)/sizeof(Player))  /* Maximum number of items in  table */


char* getLastName(char* string){
    char* first;
    for (int i = 0; i < NUM; i++){
        first = Table[i].firstName;
        if (strcmp(first, string) == 0){
            return Table[i].lastName;
        }
    }
}

检查代码中添加的评论。

&Table[i].lastName不是char*,您必须返回Table[i].lastName以返回lastName的地址。

答案 1 :(得分:0)

您必须使用RegTable [i] .lastName。也许您像这样分配返回值:

str = getLastName(str2);

这是错误的。你必须使用这样的strcpy函数:

strcpy(str,getLastName(str2)); 
如果您使用了strcpy,请不要忘记包含。