gpt4 book ai didi

c - 创建列表过程中出现的问题

转载 作者:行者123 更新时间:2023-11-30 19:01:36 25 4
gpt4 key购买 nike

当我执行代码时,它不会打印列表,因此在 Lread 函数中添加 IF 时,我发现 *list 在读取时仍然为 NULL!你能告诉我为什么 Lcreate 函数无法创建列表吗?非常感谢!!

#include <stdio.h> 
#include <stdlib.h>
#include <malloc.h>

typedef struct _elem {
int key;
struct _elem *next;
} elem;

elem* Lcreate(elem *list) {
int listsize;
scanf("%d",&listsize);
elem *p = NULL;
p = list;
elem *nuovo = NULL;
int counter=0;
while(counter<listsize){
nuovo = (elem *) malloc(sizeof(elem));
scanf("%d",&(nuovo->key));
nuovo->next=NULL;
if(p==NULL){
p=nuovo;}
else{
while(p->next!=NULL){
p=p->next;}
p->next=nuovo;}
counter++;}
}

elem* Lread(elem *list){
if (list==NULL){
printf("error\n");
}
elem *p = list;
while(p!=NULL){
printf("%d\n",p->key);
p=p->next;
}
}


main(){
struct _elem *list=NULL;
Lcreate(list);
Lread(list);
}

最佳答案

对于初学者来说,函数 Lcreate尽管其返回类型为elem *,但什么也不返回.

elem* Lcreate(elem *list);

在函数内,指向列表头部的原始指针没有改变。

函数返回添加到列表中的元素的数量会更好。

该函数可以通过以下方式定义

size_t Lcreate( elem **list ) 
{
size_t listsize;

scanf( "%zu", &listsize );

for ( size_t i = 0; i < listsize; i++ )
{
*list = ( elem * )malloc( sizeof( elem ) );

scanf( "%d", &( *list )->key );
( *list )->next = NULL;

list = &( *list )->next;
}

return listsize;
}

并称其为

elem *list = NULL;
Lcreate( &list );

elem *list = NULL;
size_t n = Lcreate( &list );

或者您可以在函数中添加一个检查,以确保下一个节点已成功分配。例如

size_t Lcreate( elem **list ) 
{
size_t listsize;

scanf( "%zu", &listsize );

size_t i = 0;

for ( ; i < listsize && ( *list = malloc( sizeof( elem ) ) ) != NULL; i++ )
{
scanf( "%d", &( *list )->key );
( *list )->next = NULL;

list = &( *list )->next;
}

return i;
}

注意标题 <malloc.h>不是标准 header 。应该将其删除。分配函数在头文件<stdlib.h>中声明。 .

关于c - 创建列表过程中出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57578291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com