我正在尝试将结构的值分配给地图,但编译后会出现以下错误消息:
error: incompatible types when assigning to type ‘char[25]’ from type ‘char *’
Run Code Online (Sandbox Code Playgroud)
在
map[i].n=m.n
Run Code Online (Sandbox Code Playgroud)
我的结构是这样定义的:
struct m1{
int c;
char n[25];
int q_m;
int q;};
Run Code Online (Sandbox Code Playgroud)
我的部分代码:
struct m1 m;
struct m1 *map = 0;
scanf("%d",&m.c);
scanf("%s",&m.n);
scanf("%d",&m.q_m);
scanf("%d",&m.q);
map[i].c=m.c;
map[i].n=m.n;
map[i].q_m=m.q_m;
map[i].q=m.q;
Run Code Online (Sandbox Code Playgroud)
数组表达式可能不是赋值的目标; 在=操作者没有定义的复制内容一个阵列的另一个.
如果n要保留以0结尾的字符串,请使用strcpy:
strcpy( map[i].n, m.n );
Run Code Online (Sandbox Code Playgroud)
如果n要保存非0终止的字符串(或嵌入0值的字符序列),请使用memcpy:
memcpy( map[i].n, m.n, sizeof map[i].n );
Run Code Online (Sandbox Code Playgroud)
除非它是sizeof或一元运算&符的操作数,或者是用于在声明中初始化另一个数组的字符串文字,否则"N-element array of T" 类型的表达式将被转换("decay")为类型的表达式"指向T",表达式的值将是第一个元素的地址.
这就是你收到错误信息的原因; 表达式m.n有"25元素数组char"; 因为它不是sizeof或一元运算&符的操作数,所以它被转换为类型char *. map[i].n没有转换(它保持类型char [25]),但正如我之前所说,数组表达式可能不是赋值运算符的目标.