C 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 

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

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

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

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

你甚至不能用简单的char数组做这样的事情

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

编者会告诉:

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

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

虽然您可以从像这样的字符串文字初始化一个字符数组

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

数组不是指针 ,这是它的一个例子。 无法分配数组,只能分配数组元素 。 你可以做到

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

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

在特定情况下,您需要做的是将所需字符串的内容复制到数组中,如下所示:

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

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

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

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

你不能像这样分配给一个数组。 即使没有结构。 那是

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

是一个错误。

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

正确的方法是

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

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

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

  person[100].firstname = 

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

你可以初始化

 char stringArray[] = "some string"; 

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

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

你可以选择使用strcpy

  strcpy(stringArray, "sometext");