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

s_t my_s_t;
my_s_t.name = "John";

最后一行我得到“分配中不兼容的类型”。我究竟做错了什么?

4

2 回答 2

3
my_s_t.name = "John";

name是一个字符数组。所以你不能直接给它分配一个字符串文字。您可以使用strcpy或类似的函数来复制字符串文字或声明namechar*.

选项:

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";
于 2012-12-09T00:24:17.733 回答
1

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

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

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

strcpy(a, "Hello");

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

char a[20] = "Hello";

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

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

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

于 2012-12-09T00:27:16.880 回答