typedef struct s {
char name[20];
char last_name[20];
int height;
} s_t;
s_t my_s_t;
my_s_t.name = "John";
最后一行我得到“分配中不兼容的类型”。我究竟做错了什么?
my_s_t.name = "John";
name
是一个字符数组。所以你不能直接给它分配一个字符串文字。您可以使用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";
您正在尝试分配一个数组。数组不可赋值。由于同样的原因,这将失败
char a[20];
a = "Hello"; /* Error */
为了将数据复制到数组中,您必须使用库函数,例如strcpy
strcpy(a, "Hello");
同时,可以在初始化时使用核心语言特性(而不是库函数)将数据复制到数组中,如
char a[20] = "Hello";
在您的情况下,您可以使用聚合初始化语法来实现相同的
s_t my_s_t = { "John", "Smith", 2 };
只要您在初始化时执行此操作,它就会起作用。如果您以后必须这样做,那strcpy
是您的朋友。