我试图将结构的值分配给地图,但编译后会出现以下错误消息:
error: incompatible types when assigning to type ‘char[25]’ from type ‘char *’
in
map[i].n=m.n
我的结构是这样定义的:
struct m1{
int c;
char n[25];
int q_m;
int q;};
我的部分代码:
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;
答案 0 :(得分:8)
数组表达式可能不是作业的目标; =
运算符未定义为将一个数组的内容复制到另一个数组。
如果n
用于保存以0结尾的字符串,请使用strcpy
:
strcpy( map[i].n, m.n );
如果n
用于保存非0终止的字符串(或包含0值的字符序列),请使用memcpy
:
memcpy( map[i].n, m.n, sizeof map[i].n );
除非它是sizeof
或一元&
运算符的操作数,或者是用于在声明中初始化另一个数组的字符串文字,否则表达式为“N-element array of { {1}}“将被转换(”衰减“)到”指向T
的指针“类型的表达式,表达式的值将是第一个元素的地址。
这就是你收到错误信息的原因;表达式T
具有类型“25个元素的m.n
数组”;由于它不是char
或一元sizeof
运算符的操作数,因此它已转换为&
类型。 char *
未被转换(它保持类型map[i].n
),但正如我之前所说,数组表达式可能不是赋值运算符的目标。
答案 1 :(得分:3)
数组变量不能是赋值运算符的左值,也就是说它们不能被赋值。
要复制数组,请逐个元素复制或使用“{3}}之类的”低级“功能一次复制特定数量的内存:
memcpy(map[i].n, m.n, sizeof map[i].n);
答案 2 :(得分:1)
首先,您需要为map
分配内存。
struct m1 *map = malloc(sizeof(struct m1));
并使用strcpy
将m.n
复制到map->n
。
答案 3 :(得分:1)
struct m1 *map;
map
是一个指针,您应该在向它写入内容之前为其分配内存。
map = malloc(sizeof(struct m1) * n);
然后你可以
map[i]
此修复后的字符串副本
strcpy(map[i].n,m.n);
答案 4 :(得分:1)
看起来你最想做的事情(除了为结构分配内存)是复制n
指向的数组的内容,而不是只复制实际的指针。
strcpy(map[i].n, m.n);
答案 5 :(得分:0)
您复制所有结构成员。最简单的方法是:
map[i]=m;
答案 6 :(得分:0)
看起来您正在尝试将m.n值直接分配给数组。 请参阅下面的详细示例:
#include<stdio.h>
#include<stdlib.h>
struct db{
int db_num;
char db_name[10];
};
int main()
{
struct db *ptr;
ptr = (struct db*)malloc(sizeof(struct db));
ptr->db_num = 10;
ptr->db_name = "xyz";
printf("Input data Base:\n");
printf("db_num:%d db_name:%s",ptr->db_num,(char*)ptr->db_name);
return 0;
}
在上面的代码片段中,我试图将“XYZ”分配给作为struct db成员的数组。 由于ptr-> db_name =“xyz”;
,它通过类似的错误st_dyna_mem.c:14:错误:从'char *'类型中分配类型'char [10]'时出现不兼容的类型
修复: 对于修复此类问题,您可以使用strcpy()或memcpy()。 EX:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct db{
int db_num;
char db_name[10];
};
int main()
{
struct db *ptr;
ptr = (struct db*)malloc(sizeof(struct db));
ptr->db_num = 10;
strcpy(ptr->db_name,"xyz");
printf("Input data Base:\n");
printf("db_num:%d db_name:%s",ptr->db_num,(char*)ptr->db_name);
return 0;
}
输出: db_num:10 db_name:xyz