尝试在结构中设置字符串

时间:2015-05-01 05:36:23

标签: c

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'的参数太少了”。当我添加第三个参数(要复制多少个字符?)时,我最终得到“使用数组类型赋值给表达式”。

2 个答案:

答案 0 :(得分:1)

在使用之前,您没有为curr分配内存。两个选项:

  1. curr指向item的实例:

    item i;
    curr = &i;
    
  2. 使用curr / malloccalloc动态分配内存:

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

我认为,它会对你有用。