错误:从类型'char*'分配类型'char [25]'时出现不兼容的类型

Zom*_*bie 1 c

我正在尝试将结构的值分配给地图,但编译后会出现以下错误消息:

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)

Joh*_*ode 8

数组表达式可能不是赋值的目标; 在=操作者没有定义的复制内容一个阵列的另一个.

如果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]),但正如我之前所说,数组表达式可能不是赋值运算符的目标.