2012-12-09 76 views
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"; 

我在最後一行中得到「賦值中不兼容的類型」。 我在做什麼錯?結構中賦值不兼容的類型

回答

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"; 
+0

如果是這樣,爲什麼char s [20] =「hello」;有用嗎? – Lior

+0

@Lior因爲這是一個初始化,而不是任務。有一些特殊的規則可以使數組的初始化工作。 –

+0

@Lior你只能在初始化字符串時做到這一點。它將初始化堆棧上的字符串文字。 –

1

您正在試圖分配陣列。數組不可分配。這將失敗出於同樣的原因

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

爲了將數據複製到一個數組,你必須使用一個庫函數,像strcpy

strcpy(a, "Hello"); 

同時,可以將數據複製到一個使用數組核心語言功能(而不是庫函數)在初始化點,如

char a[20] = "Hello"; 

在你情況下,你可以使用集合初始化語法來達到同樣的

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

只要你在初始化點這樣做,它會工作。如果你以後不得不這樣做,那麼strcpy是你的朋友。

+0

謝謝你的回答,我會接受@ KingsIndian的自從他第一次:) – Lior

相關問題