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

您不能按照您尝试的方式将字符串文字分配给字符数组。

您需要使用字符串复制函数之一将字符串复制到字符数组中:

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

如果您想复制"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 回答