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
as として宣言できます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
があなたの友達です。