如何将具有多个数组的此结构复制到另一个临时结构?

How to copy this struct with multiple arrays to another temporary struct?

我需要编写一个函数 void findBoursiers(void) 来完成以下任务 :

  1. 复制struct student m_stuTab[STU_NB]的内容,里面有6个学生 每个

    a) 学生姓名(name[MAX_NAME])

    b) 文件编号(fileNumber[NB_DIGITS])

    c) 得分。

我需要将所有这些复制到名为 struct student temp_stuTab[STU_NB] 的临时结构(在 void findBoursiers(void) 中创建)。

  1. 我要拿struct student temp_stuTab[STU_NB]的内容,把分数最高的3位同学按从好到差的顺序取。我想象通过将它们与 for 循环进行比较。

  2. 把这 3 个学生放在一个名为 char m_boursiers[3][MAX_NAME].

    的数组中

我必须不更改以下代码,它位于 main()

struct student {
    char name[MAX_NAME];
    char fileNumber[NB_DIGITS];
    int score;
};

struct student m_stuTab[NB_STU];
char m_stuName[NB_STU][MAX_NAME] = {"Mario", "Yoshi", "Luigi", "Peach", "Wario", "Waluigi"};
char m_boursiers[3][MAX_NAME];

我知道这对于 for 循环、strcpy 等是可行的,但我想知道是否有更有效的方法来做到这一点。也许类似于 memcpy 的过程?我对编码还很陌生,如果我的问题很难理解,我深表歉意。非常感谢!

 student temp_stuTab = student m_stuTab

现在我明白了真正的问题。 C 和 C++ 在这里有所不同,但无论如何都是错误的。

C:

 struct student temp_stuTab;
 temp_stuTab = m_stuTab;

C++:

 student temp_stuTab;
 temp_stuTab = m_stuTab;

C++ 会以 C 的方式接受它,但这是不好的风格,除非您将结构命名为与变量相同的名称(由于不同的原因,这是不好的风格)。

要复制结构数组,请使用 for 循环和简单赋值:

struct student m_stuTab[NB_STU];
struct student temp_stuTab[NB_STU];

for (size_t i = 0; i < NB_STU; i++) {
    temp_stuTab[i] = m_stuTab[i];
}

这是 C 和 C++ 的首选解决方案。如果你坚持使用memcpy,你可以这样写:

memcpy(temp_stuTab, m_stuTab, sizeof(*temp_stuTab) * NB_STU);

但它不会调用拷贝构造函数和C++中的赋值重载函数,而且大小容易计算错误。好的编译器会尽可能为两种方法生成相同的代码。