C 向数组中添加预定义的结构类型
我已将用户定义为用户的结构:C 向数组中添加预定义的结构类型,c,arrays,C,Arrays,我已将用户定义为用户的结构: struct user { char *name; int age; }; typedef struct user USER; 我可以创建一组用户: USER uArray[3] = { { "Allan", 12 }, { "Bob", 34 }, { "Chris", 56 } }; 现在,如何将预定义用户添加到用户列表中 USER u1 = { "Dave", 78 }; 我假设您可以将其添加到列表中,如下所示。
struct user {
char *name;
int age;
};
typedef struct user USER;
我可以创建一组用户:
USER uArray[3] = {
{ "Allan", 12 },
{ "Bob", 34 },
{ "Chris", 56 }
};
现在,如何将预定义用户添加到用户列表中
USER u1 = { "Dave", 78 };
我假设您可以将其添加到列表中,如下所示。但是,返回一个错误,说明它无法从“USER”转换为“char*”
USER uArray[4] = {
{ "Allan", 12 },
{ "Bob", 34 },
{ "Chris", 56 },
u1
};
我知道它将u1视为创建用户(name=u1)的第一个元素,那么如何将预定义用户添加到用户数组中呢
代码现在正在运行:
#include <stdio.h>
struct user {
char *name;
int age;
};
typedef struct user USER;
void changeName(USER *u);
void main(void)
{
USER u1 = { "Dave", 78 };
USER uArray[4] = {
{ "Allan", 12 },
{ "Bob", 34 },
{ "Chris", 56 }
};
// add u1 to position 3 of the array
uArray[3] = u1;
for (int i = 0; i < 4; i++)
{
if (uArray[i].name == "Bob")
{
changeName(&uArray[i]);
}
printf("User: %d, Name: %s, Age: %d\n", i, uArray[i].name, uArray[i].age);
}
}
void changeName(USER *u)
{
u->name = "Dave";
}
#包括
结构用户{
字符*名称;
智力年龄;
};
typedef结构用户;
无效更改名称(用户*u);
真空总管(真空)
{
用户u1={“Dave”,78};
用户uArray[4]={
{“艾伦”,12},
{“鲍勃”,34},
{“克里斯”,56}
};
//将u1添加到阵列的位置3
uArray[3]=u1;
对于(int i=0;i<4;i++)
{
if(uArray[i].name==“Bob”)
{
变更名称(&uArray[i]);
}
printf(“用户:%d,名称:%s,年龄:%d\n”,i,uArray[i]。名称,uArray[i]。年龄);
}
}
void changeName(用户*u)
{
u->name=“Dave”;
}
#包括
结构用户{
字符*名称;
智力年龄;
};
typedef结构用户;
用户u1={“Dave”,78};
用户uArray[4]={
{“艾伦”,12},
{“鲍勃”,34},
{“克里斯”,56}
};
int main()
{
int i;
uArray[3]=u1;
对于(i=0;i<4;++i)
{
printf(“%s:%d\n”,uArray[i]。名称,uArray[i]。年龄);
}
返回0;
}
将其添加到数组中,但执行时返回调试错误;声明变量(uArray和u1)周围的堆栈已损坏。请使用C99编译器。例如,clang,gcc。这与编译器有关吗?我的意思是提供的解决方案是否有效?@Kurtiss变量可以在c99之后的初始化中使用。(类似全局变量的情况除外)您的代码中的u1
周围是否有大括号?这至少可以解释从USER
转换为char
的错误。堆栈损坏可能发生在其他地方,因此您应该发布更多代码。(如果程序很大,尝试将错误隔离在几行中并仅发布这些行。)这会将其添加到数组中,但在执行时,会返回调试错误;声明变量(uArray和u1)周围的堆栈已损坏。我编译并获得正确的输出。cc-o f1./f1其已修复,但解决方案使我困惑;定义阵列时,您必须指定阵列中允许的最大用户数(4),但要将预定义用户添加到阵列中,您必须指定阵列当前拥有的用户数(3),不仅如此,解决方案看起来还表明阵列与用户相等,实际上,它只是将用户添加到列表中,是吗?@Kurtiss:这是C。您可能应该在阵列旁边记录活动用户的数量,并注意不要使阵列溢出。顺便说一下,uArray[3]=u1
确实非常明确地将用户u1
分配给用户数组的第四个条目(索引3
)。它并没有说数组等于用户。我只是意识到现在><所以它将用户分配到数组中的特定点(本例中的位置3),对不起,有时候我会很愚蠢。
#include <stdio.h>
struct user {
char *name;
int age;
};
typedef struct user USER;
USER u1 = { "Dave", 78 };
USER uArray[4] = {
{ "Allan", 12 },
{ "Bob", 34 },
{ "Chris", 56 }
};
int main()
{
int i;
uArray[3] = u1;
for (i = 0; i < 4; ++i)
{
printf("%s: %d\n", uArray[i].name, uArray[i].age);
}
return 0;
}