我有两个文件,list_funcs.c和list_mgr.c。 List_funcs.c具有将节点插入链表的功能:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct data_node {
char name [25];
int data;
struct data_node *next;
};
struct data_node * insert (struct data_node **p_first, int elem) {
struct data_node *new_node, *prev, *current;
current=*p_first;
while (current != NULL && elem > current->data) {
prev=current;
current=current->next;
} /* end while */
/* current now points to position *before* which we need to insert */
new_node = (struct data_node *) malloc(sizeof(struct data_node));
new_node->data=elem;
new_node->next=current;
if ( current == *p_first ) /* insert before 1st element */
*p_first=new_node;
else /* now insert before current */
prev->next=new_node;
/* end if current == *p_first */
return new_node;
};
现在我试图从list_mgr.c这样调用这个函数,但是得到错误“函数'insert'的参数太少了”:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "list_funcs.h"
int main (void) {
struct data_node *first, *new_node, *ptr;
printf("Insert first node into list\n");
first=ptr=insert(&first, 5);
strcpy(ptr->name,"Alexander");
return 0;
}
为什么我收到“太少的参数”错误以及如何正确调用它?
标题list_func.h包含:
#define STRINGMAX 25
struct data_node {
char name [STRINGMAX];
int data;
struct data_node *next;
};
struct data_node * insert (struct data_node **, int, char *);
答案 0 :(得分:4)
该函数有三个参数,你只传递前两个。
struct data_node * insert (struct data_node **, int, char *);
要求您将指针传递给data_node*
,然后传递int
,最后传递char*
类型。
令人困惑的是,你的函数定义也与声明不匹配,定义中省略了最后一个char*
。
答案 1 :(得分:4)
您对insert
的定义如下:
struct data_node * insert (struct data_node **p_first, int elem)
但标题中的声明如下所示:
struct data_node * insert (struct data_node **, int, char *);
注意最后的char *
。您可能希望删除它以使其匹配。
答案 2 :(得分:1)
list_func.h
中的函数原型有一个额外的参数:
struct data_node * insert (struct data_node **, int, char *);
/* one of these doesn't belong: ^ ^ */
因此list_mgr.c
中的函数定义和list_funcs.c
中的调用匹配,list_func.h
中的原型不匹配。