0

私はCを初めて使用し、構造体配列を使用しています。値を割り当てるのに問題があります。これが私の構造です。

struct student{
        char firstname[30];
        char surname[30];
        int streetNo;
        char streetName[30];
        char suburb[30];
        char state[4];
        int postCode;
        char DOB[10];
        int studentNo;
        char gender;
        char courseNo[4];
        char active;
        int WAM;
    };
struct student person[1000];

これが構造体に値を割り当てる私です

person[100].firstname = "dan";

これは私のエラーです

 assignment type mismatch: array[30] of char "=" pointer to char
4

8 に答える 8

4

このような文字列リテラルから文字の配列を初期化できますが

char str[] = "dan";

文字列リテラルを、実行しようとしている方法で文字の配列に割り当てることはできません。

文字列コピー関数の1つを使用して、文字列を文字配列にコピーする必要があります。

strcpy(person[100].firstname, "dan");

最初の4つの要素にコピー"dan"して、の残りの要素firstnameをゼロで埋めたい場合は、次を使用しますstrncpy

strncpy(person[100].firstname, "dan", 30);

firstnameポインタを作成して、文字列に動的にメモリを割り当てるか、直接割り当てることができることを指摘しておく価値があります。

 struct student{
    char *firstname;
    char *surname;
    /* and so on... */
 };

 student[100].firstname = "dan";
 student[100].surname = "brown";
于 2012-04-27T09:14:40.500 に答える
4

宣言時にのみ、そのような配列を初期化できます。それ以外の場合は、を使用する必要があります。

strcpy(person[100].firstname,"dan");

単純なchar配列ではそのようにすることさえできません

char a[30];
a="dan";

コンパイラーは次のように伝えます:

incompatible types when assigning to type ‘char[30]’ from type ‘char *’

「dan」は、このように配列に割り当てることができないポインタによって保持されている文字列リテラルであるためです。

于 2012-04-27T09:15:32.807 に答える
3

Cでは、このような文字列は文字配列を使用して実装されます。文字配列は正確に定義したものですが、Cでこのように文字列を直接割り当てることはできません。そのために文字列関数を使用する必要があります。使用する関数はですstrcpy()。次のように割り当てる必要があります:-

strcpy(person[100].firstname, "dan");
于 2012-04-27T09:14:22.957 に答える
3

配列はポインタではなく、これはその一例です。配列を割り当てることはできません。配列要素のみを割り当てることができます。あなたができる

 person[100].firstname[0] = 'd';
 person[100].firstname[1] = 'a';
 person[100].firstname[2] = 'n';
 person[100].firstname[3] = '\0'; /* Pretty tedious... */

または、30バイトを超えてコピーしないことがわかっている場合は、

 strcpy (person[100].firstname, "dan");
于 2012-04-27T09:16:36.423 に答える
1

配列名自体が配列のベースアドレスを示します。また、配列のベースアドレスを左側の値にすることはできません。

  person[100].firstname  = 

許可されていない配列のベースアドレスに他の値を割り当てているため、エラーが発生します。

初期化できます

char stringArray[]  = "some string";

ただし、すでに宣言されている配列に値を割り当てることはできません

  char stringArray[100];
  stringArray     =   "some string";  <== error

別の方法はstrcpyを使用することです

 strcpy(stringArray, "sometext");
于 2012-04-27T09:14:43.543 に答える
1

特定の問題は、バイトの配列に文字列を割り当てようとしていることです。

その特定の場合に行う必要があるのは、次のように、必要な文字列の内容を配列にコピーすることです。

strncpy(person[100].firstname, "dan", 30);

より一般的な問題は、あなたがしていることがひどいことです。このような学生の記録の場合、行うべき唯一の賢明なことは、適切なデータベースを使用することです。あなたの場合、SQLiteを使用するのがおそらく適切です。このような単純な学習演習にデータベースを使用するのはやり過ぎのように思えるかもしれませんが、後で大いに役立つのは経験です。

于 2012-04-27T09:15:02.917 に答える
1

strcpy()char配列に値を割り当てることができます。

strcpy(person[100].firstname,"Dan");
于 2012-04-27T09:15:32.947 に答える
1

このように配列に割り当てることはできません。構造体がなくても。あれは

char name[10];
name = "ert";

エラーです。

(初期化でのみ実行できますchar name[10] = "ert";

それを行う正しい方法は

strcpy(person[100].firstname, "dan");

strcpy文字列の最大サイズを必要とするバリエーションを使用する方が安全です。

于 2012-04-27T09:15:33.587 に答える