EMS意味着C而不是C++。选择一种语言,因为这个问题的答案会非常不同。@Adam Varhegyi:在许多情况下,单独的数组被包装到struct类型中,专门用于支持赋值。在您的示例中,可以将rec2分配给rec,但无法将rec2.team分配给rec.t

EMS意味着C而不是C++。选择一种语言,因为这个问题的答案会非常不同。@Adam Varhegyi:在许多情况下,单独的数组被包装到struct类型中,专门用于支持赋值。在您的示例中,可以将rec2分配给rec,但无法将rec2.team分配给rec.t,c++,c,struct,C++,C,Struct,EMS意味着C而不是C++。选择一种语言,因为这个问题的答案会非常不同。@Adam Varhegyi:在许多情况下,单独的数组被包装到struct类型中,专门用于支持赋值。在您的示例中,可以将rec2分配给rec,但无法将rec2.team分配给rec.team(这是您正在尝试的操作)。数组本身是不可赋值的。这比必要的复杂得多。您可以分配结构,甚至是包含数组的结构,即使您不能直接分配数组。因此rec=rec2简单、安全、理智且语言中立(它在C和C++中都能工作)。有时结构赋值不正确(例如,当结构


EMS意味着C而不是C++。选择一种语言,因为这个问题的答案会非常不同。@Adam Varhegyi:在许多情况下,单独的数组被包装到
struct
类型中,专门用于支持赋值。在您的示例中,可以将
rec2
分配给
rec
,但无法将
rec2.team
分配给
rec.team
(这是您正在尝试的操作)。数组本身是不可赋值的。这比必要的复杂得多。您可以分配结构,甚至是包含数组的结构,即使您不能直接分配数组。因此
rec=rec2
简单、安全、理智且语言中立(它在C和C++中都能工作)。有时结构赋值不正确(例如,当结构包含指针时),但这不是问题。@JonathanLeffler:这一点很好。我不确定我写这篇文章时是怎么想的,但这并不是一个特别好的答案。这比必要的要复杂得多。您可以分配结构,甚至是包含数组的结构,即使您不能直接分配数组。因此
rec=rec2
简单、安全、理智且语言中立(它在C和C++中都能工作)。有时结构赋值不正确(例如,当结构包含指针时),但这不是问题。@JonathanLeffler:这一点很好。我不确定我写这篇文章的时候是怎么想的,但这并不是一个特别好的答案。请注意
(void*)a==(void*)&a
,但是
a
的类型是
type
类型的“大小数组
N
”,而
&a
的类型是“类型
类型的大小数组
N
”。在大多数上下文(但不是,例如,
sizeof
)中,
a
会自动更改(衰减)为“指向类型
类型的指针”。在示例1中,您可以使用
sizeof(rec.team)
sizeof(rec2.team)
代替
40*sizeof(char)
——然后您可以更改数组的大小,而无需再更改任何代码。类似地,在示例2中使用40也不是一个好主意。还有一个事实是,
rec=rec2很好。@Jonathan Leffler:谢谢。对于第一个注释,您的观点已被采纳,我稍微更改了答案开头的描述。至于其余的,我的回答的目的是强调数组和其他类型变量之间的区别,而不是给出最正确的编码方式(因此标题示例)。感谢修改第一部分。一般来说,由于人们的倾向性,示例应该展示最佳实践。当最佳实践非常复杂时,一个简单的例子就可以了。当最佳实践并不比非最佳实践(如此处所示)更复杂时,最好展示最佳实践,即使您没有解释它。这样,即使在不知道事情发生的情况下,货物崇拜者也将部分地免受自身的伤害。@Jonathan Leffler:谢谢。不使用
sizeof
的真正原因是每次使用
memcpy
(甚至是
for
循环)时我都会遇到同样的困境。您可以看到-必须选择将两个变量中的哪一个“放入”
sizeof
。从技术上讲,这当然无关紧要。但是,无论是谁查看代码,都可能会发现自己对为什么选择一个变量而不是另一个变量感到困惑。现在,对于这个特殊的问题,这个概念变得更加强大,因为OP对于所有这些似乎都是全新的。因此,我尽量使编码示例保持清晰和简单。我理解对使用一个变量或另一个变量的保留。然后,另一个选项是使用
sizeof(struct record)
;只要两个变量的类型相同,这是好的,如果它们不是相同的类型,你就会遇到更大的问题。请注意
(void*)a==(void*)&a
,但是
a
的类型是
type
类型的“大小数组
N
”,而
&a
的类型是“类型
类型的大小数组
N
”。在大多数上下文(但不是,例如,
sizeof
)中,
a
会自动更改(衰减)为“指向类型
类型的指针”。在示例1中,您可以使用
sizeof(rec.team)
sizeof(rec2.team)
代替
40*sizeof(char)
——然后您可以更改数组的大小,而无需再更改任何代码。类似地,在示例2中使用40也不是一个好主意。还有一个事实是,
rec=rec2很好。@Jonathan Leffler:谢谢。对于第一个注释,您的观点已被采纳,我稍微更改了答案开头的描述。至于其余的,我的回答的目的是强调数组和其他类型变量之间的区别,而不是给出最正确的编码方式(因此标题示例)。感谢修改第一部分。一般来说,由于人们的倾向性,示例应该展示最佳实践。当最佳实践非常复杂时,一个简单的例子就可以了。当最佳实践并不比非最佳实践(如此处所示)更复杂时,最好展示最佳实践,即使您没有解释它。这样,即使在不知道事情发生的情况下,货物崇拜者也将部分地免受自身的伤害。@Jonathan Leffler:谢谢。不使用
sizeof
的真正原因是每次使用
memcpy
(甚至是
for
循环)时我都会遇到同样的困境。您可以看到-必须选择将两个变量中的哪一个“放入”
sizeof
。从技术上讲,这当然无关紧要。但是,无论是谁查看代码,都可能会发现自己对为什么选择一个变量而不是另一个变量感到困惑。现在,对于这个特殊的问题,这种观念变得更加强烈
struct record {
  char team[40];
}
struct record rec2;
struct record rec;

rec.team = rec2.team;
error: incompatible types in assignment
rec = rec2;
memcpy( rec.team, rec2.team, 40 );
strcpy( rec.team, rec2.team );
#include <array>

struct record{

std::array<char, 40> team;

};

record rec, rec2;
//.. some other code

rec = rec2;
memcpy(rec.team,rec2.team,40*sizeof(char));
for (int i=0; i<40; i++)
    rec.team[i] = rec2.team[i];