typedef struct s {
char name[20];
char last_name[20];
int height;
} s_t;
s_t my_s_t;
my_s_t.name = "John";
我在最後一行中得到「賦值中不兼容的類型」。 我在做什麼錯?結構中賦值不兼容的類型
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
是你的朋友。
謝謝你的回答,我會接受@ KingsIndian的自從他第一次:) – Lior
如果是這樣,爲什麼char s [20] =「hello」;有用嗎? – Lior
@Lior因爲這是一個初始化,而不是任務。有一些特殊的規則可以使數組的初始化工作。 –
@Lior你只能在初始化字符串時做到這一點。它將初始化堆棧上的字符串文字。 –