Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 试图在结构中设置字符串_C - Fatal编程技术网

C 试图在结构中设置字符串

C 试图在结构中设置字符串,c,C,当我试图将name设置为“Carl”时,试图找出为什么这不起作用。我得到的“strcpy函数的参数太少”,即使我有两个参数(目标,源)。当我添加第三个参数(要复制多少个字符?)时,我得到的结果是“数组类型的表达式赋值”。在使用它之前,您没有为curr分配内存。两种选择: 使curr指向项的一个实例: struct list_el { unsigned int data; char name[16]; char grade; struct list_el * nex

当我试图将name设置为“Carl”时,试图找出为什么这不起作用。我得到的“strcpy函数的参数太少”,即使我有两个参数(目标,源)。当我添加第三个参数(要复制多少个字符?)时,我得到的结果是“数组类型的表达式赋值”。

在使用它之前,您没有为
curr
分配内存。两种选择:

  • 使
    curr
    指向
    项的一个实例

    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;
    
  • 使用
    malloc
    /
    calloc
    curr
    动态分配内存:

    item i;
    curr = &i;
    
    然后,在使用后将其释放。通过检查其返回值来检查
    malloc
    /
    calloc
    是否未失败也是一个好主意。失败时,它将返回
    NULL


  • 我没有收到您的错误“函数“strcpy”的参数太少”,但我可以看到您声明了一个项*curr,但从未初始化。因此我尝试更正此错误,并更新了代码,如下所示,它没有给出任何错误

    curr = malloc(sizeof(*curr));
    /*OR*/
    curr = calloc( 1, sizeof(*curr));
    
    #包括
    #包括
    #包括
    结构列表{
    无符号整数数据;
    字符名[16];
    煤焦品位;
    结构列表_el*下一步;
    };
    类型定义结构列表项;
    int main(int argc,字符**argv){
    项目*curr,*head;
    curr=malloc(sizeof(struct list_el));
    //第一项
    当前->数据=3141592;
    strcpy(curr->name,“Carl”);
    当前->等级='A';
    当前->下一步=头部;
    水头=电流;
    }
    

    我想,它会对你有用。

    发布一个,你在使用它之前没有为
    curr
    分配内存。不确定为什么编译失败,但它肯定是UB-你声明了一个指向
    项的指针,但没有将其初始化为实际实例。很抱歉,这将阻止eclipse为我构建我的项目…它在分配内存x后工作。感谢您的帮助!不知道为什么它在剩下的部分没有给我一个错误…你的真实代码有
    #include
    ?想法:而不是
    curr=malloc(sizeof(struct list_el)),考虑<代码> Curr= Malc(sieof of 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;
    }