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または同様の関数を使用して、文字列リテラルをコピーするか、 nameas として宣言できます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";
于 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 に答える