Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 向数组中添加预定义的结构类型_C_Arrays - Fatal编程技术网

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;
  }