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

时间:2014-12-30 14:59:17

标签: c

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

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;

7 个答案:

答案 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)); 

并使用strcpym.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