在VS2019中编写C语言的链表程序出现了C4473等错误,怎么修改?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VS2019中编写C语言的链表程序出现了C4473等错误,怎么修改?相关的知识,希望对你有一定的参考价值。

程序中的这几行代码有问题,scanf_s后面写的参数该怎么写?
scanf_s("%s", &pNew->cName);
scanf_s("%d", &pNew->iNumber);

前面的代码是
struct Student
char cName[20];
int iNumber;
struct Student* pNext;
;
int iCount;
struct Student* Create()//创建动态链表

struct Student* pHead = NULL;
struct Student* pEnd, * pNew;
iCount = 0;
pEnd = pNew = (struct Student*)malloc(sizeof(struct Student));
printf("please firse enter Name,then Number\n");
scanf_s("%s", &pNew->cName);
scanf_s("%d", &pNew->iNumber);

从代码来看,最明显的错误代码如图中scanf_s函数有两个问题:

1.数组名本身是地址,不需要加取地址符&;

2.scanf_s是新的安全输入函数,它要求输入字符串或者字符,后面必须指定最大可以容纳字符个数。

所以字符串输入需改为

scanf_s("%s", pNew->cName, sizeof(pNew->cName));

输入整数,浮点数没有这个要求。

参考技术A 你这得截图那个报错的bug review啊,错误代号谁能记住
好的,第一个报错捏,是这样的,你如果要用scanf_s()函数的话,因为他会进行边界检查。所以你要在后面加一个sizeof(&pNew->cName)
就是:scanf_s("%s",&pNew->cName,sizeof(&pNew->cName));
其他的报错好像也是基于这个报错,你先改好这个运行一下再看有没有其他的。本回答被提问者采纳

C - 如何释放在其节点中具有链表的链表?

作为我在内核空间编写的程序的一部分,我创建了一个链接列表,其节点中有另一个链表。节点可以是两种类型,可以是仅具有int值和char *值的通道,也可以是具有int值和通道链接列表的设备文件。但是我的freeList函数中有NULL指针引用。

我得到的错误是:无法处理内核NULL指针取消引用

知道如何解决这个问题吗?

struct node {
    int val;
    char* msg;
    struct node* headOfIdList;
    struct node* next;
};

static void addChannel(struct node* head, int id, char* msg) {
    printk(KERN_INFO "creating channel
");
    struct node *curr ;
    curr=head;
    while (curr->next != NULL) {
        curr = curr->next;
    }
    curr->next = kmalloc(sizeof(struct node), GFP_KERNEL);
    curr->next->val = id;
    curr->next->msg = msg;
    curr->next->headOfIdList = NULL;
    curr->next->next = NULL;
    printk(KERN_INFO "channel created
");
}

static void addFile(struct node* head, int minor) {
    printk(KERN_INFO "creating file
");
    struct node *curr ;
    curr=head;
    while (curr->next != NULL) {
        curr = curr->next;
    }
    curr->next = kmalloc(sizeof(struct node), GFP_KERNEL);
    curr->next->val = minor;
    curr->next->msg = NULL;
    curr->next->headOfIdList = NULL;
    curr->next->next = NULL;
    printk(KERN_INFO "file created
");
}

static struct node* find(struct node* head, int val) {
    printk(KERN_INFO "looking for node
");
    struct node *curr ;
    curr=head;
    while (curr != NULL) {
        if (curr->val == val) {
            return curr;
        }
        curr = curr->next;
    }
    return NULL;
}

static void freeList(struct node* head) {
    printk(KERN_INFO "freeing list
");
    struct node *curr ;
    curr=head;
    while (curr != NULL) {
        struct node *tmp = curr->next;
        if (curr->headOfIdList != NULL) {
            freeList(curr->headOfIdList);
        }
        kfree(curr);
        curr = tmp;
        //curr=curr->next;
    }
}
答案

如果你在循环外声明tmp var而while?以struct node *curr, *tmp;为例。

以上是关于在VS2019中编写C语言的链表程序出现了C4473等错误,怎么修改?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用vs2019写c语言程序?

怎么用vs2019写c语言程序?

求C语言 数据结构中的链表创建,插入和删除代码

C语言的链表怎么排序

有懂c语言的大神吗?我用的VS2019,编写一个小程序,怎么运行啊?我的代码绝对没错,是否少安装东西了

使用vs2013编写c语言程序 为啥 会出现max函数没有被定义error