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

如何在C中访问结构数组中的结构成员,c,struct,C,Struct,我有一个结构数组,用来获取某个成员,问题是我只想访问结构的某个特定成员,而不是整个结构本身。 例如,如果我的结构声明如下: static _Plyr { char* firstName; int age; char* lastName; } typedef struct _Plyr Player; str = getLastName(str2); strcpy(str,getLastName(str2)); 我有一张桌子…例如 static Player Table[NU

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

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

typedef struct _Plyr Player; 
str = getLastName(str2);
strcpy(str,getLastName(str2)); 
我有一张桌子…例如

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;
    }
  }
}
char*getLastName(char*string){
字符*第一;
对于(int i=0;i
我试过
Table[I].lastName,Table[I]->lastName,
…但两种方法都不起作用。我知道
&表[I]
给了我结构本身的地址,然后我可以从那里访问它,但我只想得到成员本身,而不是整个结构。感谢您抽出时间查看下面的代码

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;
        }
    }
}
typedef结构{
char*名字;
智力年龄;
char*lastName;
}玩家;/*类型定义结构_Plyr进入播放器*/
静态播放器表[]={/*带有项目数的表*/
{“约翰”,24,“墙”},
{“卡梅洛”,33岁,“安东尼”},
---------------------------
---------------------------
};
#定义NUM(sizeof(Table)/sizeof(Player))/*表中项目的最大数量*/
char*getLastName(char*string){
字符*第一;
for(int i=0;i
检查代码中添加的注释


&Table[i]。lastName
不是
char*
,您必须返回
表[i]。lastName
若要返回
lastName

的地址,必须使用RegTable[i]。lastName。也许您可以这样分配返回值:

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

typedef struct _Plyr Player; 
str = getLastName(str2);
strcpy(str,getLastName(str2)); 
这是错误的。必须像这样使用strcpy函数:

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

typedef struct _Plyr Player; 
str = getLastName(str2);
strcpy(str,getLastName(str2)); 

如果您使用strcpy,请不要忘记包括在内。

返回RegTable[i]。如果我理解您的问题,lastName
将是正确的。也许您可以详细说明您的问题,您是否遇到构建错误?跑步时撞车?意外输出?请阅读。请试着创建一个演示给我们看。哦,你展示的小代码中有很多不一致之处:
\u People
PlyrTbl
<代码>表格
注册表
NUM
REGCOUNT
?A真的很重要!最后,与您的问题完全无关,但是在编译器和标准库的所有作用域中都保留了带有前导下划线和大写字母(如
\u People
)的符号名。不要使用这样的符号。你的名字和姓氏只是指针。谁在为他们分配内存?如果这是您在代码中所做的全部工作,您的代码理想情况下应该崩溃。我得到以下警告:return从整数生成指针,而不进行强制转换。我修正了代码,虽然这不是问题所在,但我想这个警告可能暗示我没有得到我想要的。