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