C struct数组赋值问题

时间:2012-04-27 09:10:11

标签: c arrays struct

我是C的新手,我正在使用struct数组。我无法为其分配值。这是我的结构..

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

8 个答案:

答案 0 :(得分: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";

答案 1 :(得分:4)

您只能在声明时初始化类似的数组,否则您需要使用

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

你甚至不能用简单的char数组

char a[30];
a="dan";
编译器将告诉:

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

因为“dan”是一个字符串文字,由指针保存,不能像这样分配给数组。

答案 2 :(得分:3)

在C中,这样的字符串是使用字符数组实现的。字符数组正是您定义的,但是不可能在C中直接分配字符串。您必须使用字符串函数。要使用的函数是strcpy()。你必须分配如下: -

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

答案 3 :(得分: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");

答案 4 :(得分:1)

具体问题是您正在尝试将字符串分配给字节数组。

在这种特殊情况下你需要做的是将你想要的字符串的内容复制到数组中,如下所示:

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

更普遍的问题是你正在做的事情很可怕。对于像这样的学生记录,唯一明智的做法是使用适当的数据库;在你的情况下使用SQLite可能是合适的。使用数据库进行简单的学习练习可能看起来有点过头了,但是经验会让你们在以后帮助很多。

答案 5 :(得分:1)

您可以strcpy()为char数组赋值。

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

答案 6 :(得分:1)

您无法像这样分配给数组。即使没有结构。那是

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

是一个错误。

(您只能在初始化char name[10] = "ert";

中执行此操作

正确的方法是

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

更安全地使用需要最大字符串大小的strcpy变体。

答案 7 :(得分:0)

数组名称本身给出了数组基址..并且数组基地址不能是左侧值。

  person[100].firstname  = 

给出错误,因为您将一些其他值分配给不允许的数组基址。

您可以初始化

char stringArray[]  = "some string";

但是你不能为已经声明的数组赋值

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

您可以选择使用strcpy

 strcpy(stringArray, "sometext");