如何将具有多个数组的此结构复制到另一个临时结构?
How to copy this struct with multiple arrays to another temporary struct?
我需要编写一个函数 void findBoursiers(void)
来完成以下任务 :
复制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)
中创建)。
我要拿struct student temp_stuTab[STU_NB]
的内容,把分数最高的3位同学按从好到差的顺序取。我想象通过将它们与 for 循环进行比较。
把这 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++中的赋值重载函数,而且大小容易计算错误。好的编译器会尽可能为两种方法生成相同的代码。
我需要编写一个函数 void findBoursiers(void)
来完成以下任务 :
复制
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)
中创建)。
我要拿
struct student temp_stuTab[STU_NB]
的内容,把分数最高的3位同学按从好到差的顺序取。我想象通过将它们与 for 循环进行比较。把这 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++中的赋值重载函数,而且大小容易计算错误。好的编译器会尽可能为两种方法生成相同的代码。