各位,本人对下面的代码总是改不对,不知道如何让它正常运行起来,特别是那个函数:List_list它的有关问题出在哪,或者是没有有关问题
各位大虾,本人对下面的代码总是改不对,不知道怎么让它正常运行起来,特别是那个函数:List_list它的问题出在哪,或者是没有问题
List_list是创建并返回一个链表,它的参数为N个非空指针加一个空指针,创建一个有N个节点的链表,这N个节点的first字段存有参数列表中的N个非空指针,但它们的rest字段为空
#define T Thelist_T
typedef struct T *T;
struct T
{
T rest;
void *first;
};
T
List_list( void *x, ... )
{
va_list ap;
T list, *p=&list;
va_start( ap, x );
for( ; x; x=va_arg( ap, void * ) )
{
p=malloc( sizeof(*p) );
if( p==NULL )
{
printf( "Warming, the merroy point to NULL!\n " );
free(p);
return NULL;
}
(*p)-> first=x;
p=&(*p)-> rest;
}
*p=NULL;
va_end(ap);
return list;
}
// List_list: test routine
void main(void)
{
T list;
list=List_list( "BABA ", "MAMA ", "DIID ", "WO ", NULL );
printf( "%s\n ", list-> first );
}
------解决方案--------------------
你的这段就不对,
struct T
{
T rest;
void *first;
};
这是什么啊? 死循环,看见没,
------解决方案--------------------
(*p)-> first=x; ///???p-> first = x;
p=malloc( sizeof(*p) );
虽然p分配了空间,但是p-> first没有.
需要
p-> first = malloc(sizeof(x)+1);
memset(p-> first,0,sizeof(p-> first));
strcpy(p-> first,x);
还有p=&(*p)-> rest; 不知道LZ想干什么?
------解决方案--------------------
(*p)-> first => p-> first;
p=&(*p)-> rest; => &(p-> rest)
------解决方案--------------------
struct T
{
T rest;
void *first;
};
改为
stuct T
{
struct T rest;
void *first;
};
List_list是创建并返回一个链表,它的参数为N个非空指针加一个空指针,创建一个有N个节点的链表,这N个节点的first字段存有参数列表中的N个非空指针,但它们的rest字段为空
#define T Thelist_T
typedef struct T *T;
struct T
{
T rest;
void *first;
};
T
List_list( void *x, ... )
{
va_list ap;
T list, *p=&list;
va_start( ap, x );
for( ; x; x=va_arg( ap, void * ) )
{
p=malloc( sizeof(*p) );
if( p==NULL )
{
printf( "Warming, the merroy point to NULL!\n " );
free(p);
return NULL;
}
(*p)-> first=x;
p=&(*p)-> rest;
}
*p=NULL;
va_end(ap);
return list;
}
// List_list: test routine
void main(void)
{
T list;
list=List_list( "BABA ", "MAMA ", "DIID ", "WO ", NULL );
printf( "%s\n ", list-> first );
}
------解决方案--------------------
你的这段就不对,
struct T
{
T rest;
void *first;
};
这是什么啊? 死循环,看见没,
------解决方案--------------------
(*p)-> first=x; ///???p-> first = x;
p=malloc( sizeof(*p) );
虽然p分配了空间,但是p-> first没有.
需要
p-> first = malloc(sizeof(x)+1);
memset(p-> first,0,sizeof(p-> first));
strcpy(p-> first,x);
还有p=&(*p)-> rest; 不知道LZ想干什么?
------解决方案--------------------
(*p)-> first => p-> first;
p=&(*p)-> rest; => &(p-> rest)
------解决方案--------------------
struct T
{
T rest;
void *first;
};
改为
stuct T
{
struct T rest;
void *first;
};