struct list_el {
unsigned int data;
char name[16];
char grade;
struct list_el * next;
};
typedef struct list_el item;
int main(int argc, char **argv) {
item *curr, *head;
//first item
curr->data = 3141592;
strcpy(curr->name, "Carl");
curr->grade = 'A';
curr->next = head;
head = curr;
当我尝试将名称设置为“Carl”时,试图弄清楚为什么这不起作用。即使我有2个参数(目标,源),我得到“参数'strcpy'的参数太少了”。当我添加第三个参数(要复制多少个字符?)时,我最终得到“使用数组类型赋值给表达式”。
答案 0 :(得分:1)
在使用之前,您没有为curr
分配内存。两个选项:
让curr
指向item
的实例:
item i;
curr = &i;
使用curr
/ malloc
为calloc
动态分配内存:
curr = malloc(sizeof(*curr));
/*OR*/
curr = calloc( 1, sizeof(*curr));
以后,在使用后将其释放。通过检查其返回值来检查malloc
/ calloc
是否没有失败也是一个好主意。它会在失败时返回NULL
。
答案 1 :(得分:1)
我没有收到你的错误“函数'strcpy'”的参数太少但是我可以看到你声明了一个 item * curr 但是从未初始化过。所以我尝试纠正这个并更新你的代码如下,并没有给出任何错误。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct list_el {
unsigned int data;
char name[16];
char grade;
struct list_el * next;
};
typedef struct list_el item;
int main(int argc, char **argv) {
item *curr, *head;
curr = malloc(sizeof(struct list_el));
//first item
curr->data = 3141592;
strcpy(curr->name, "Carl");
curr->grade = 'A';
curr->next = head;
head = curr;
}
我认为,它会对你有用。