typedef struct s {
char name[20];
char last_name[20];
int height;
} s_t;
s_t my_s_t;
my_s_t.name = "John";
我在最后一行得到“不兼容的作业类型”。 我做错了什么?
答案 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
就是您的朋友。