提问人:umut utku 提问时间:11/8/2023 更新时间:11/8/2023 访问量:53
表达式必须是可修改的左值 C/C++(137) [重复]
expression must be a modifiable lvalue C/C++(137) [duplicate]
问:
我正在尝试将一个 2D 数组分配给结构中定义的另一个 2D 数组。但是我收到这个错误;“表达式必须是可修改的左值 C/C++(137)”。
这是代码;
#define NUM_TEMPLATES 4
float templateForehand1[3][50];
struct templ_st {
float frame[3][50];
};
struct templ_st templates[NUM_TEMPLATES];
templates[0].frame = templateForehand1;
我收到最后一行的错误。
任何关于为什么会发生此错误的见解都将不胜感激。
答:
1赞
0___________
11/8/2023
#1
不能用 C 语言分配数组。
您需要复制它或使用指针。
memcpy(templates[0].frame, templateForehand1, sizeof(templates[0].frame));
或
struct templ_st {
float (*frame)[50];
};
/* ... */
templates[0].frame = templateForehand1;
但是第二个选项不会提供数组的深层副本,而只是对它的引用。
另一种选择是将结构体用作两个对象
struct templ_st {
float frame[3][50];
};
struct templ_st templateForehand1 ={{ /* init */ }};
/* ... */
struct templ_st templates[NUM_TEMPLATES];
templates[0].frame = templateForehand1;
1赞
Lundin
11/8/2023
#2
您可以将包含数组的结构分配给另一个相同类型的结构。但是,C 不允许原始数组的赋值/初始化 - 这只是语言的设计方式。
选项 1 - 仅使用结构:
struct templ_st {
float frame[3][50];
};
const struct templ_st template1 = { .frame = {/* array init list here */} };
struct templ_st templates[NUM_TEMPLATES];
...
templates[0] = template1;
选项 2 - :memcpy
memcpy(templates[0].frame, templateForehand1, sizeof(templates[0].frame));
评论
.frame
tempalteForehand1