在struct上赋值的类型不兼容

时间:2012-12-09 00:22:22

标签: c struct

typedef struct s {
char name[20];
char last_name[20];
int height;
} s_t;

s_t my_s_t;
my_s_t.name = "John";

我在最后一行得到“不兼容的作业类型”。 我做错了什么?

2 个答案:

答案 0 :(得分:3)

my_s_t.name = "John";

name是一个char数组。因此,您无法直接为其指定字符串文字。您可以使用strcpy或类似函数复制字符串文字或将name声明为char*

选项:

1)

typedef struct s {
char name[20];
char last_name[20];
int height;
} s_t;

s_t my_s_t;
strcpy(my_s_t.name, "John");

2)

 typedef struct s {
    char *name;
    char last_name[20];
    int height;
    } s_t;

    s_t my_s_t;
    my_s_t.name = "John";

答案 1 :(得分:1)

您正在尝试分配数组。数组不可分配。由于同样的原因,这将失败

char a[20];
a = "Hello"; /* Error */

为了将数据复制到数组中,您必须使用库函数,例如strcpy

strcpy(a, "Hello");

同时,可以在初始化点使用核心语言功能(而不是库函数)将数据复制到数组中,如

char a[20] = "Hello";

在您的情况下,您可以使用聚合初始化语法来实现相同的

s_t my_s_t = { "John", "Smith", 2 };

只要你在初始化时这样做,它就会起作用。如果您以后必须这样做,那么strcpy就是您的朋友。