0

list_funcs.c と list_mgr.c の 2 つのファイルがあります。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 *);
4

3 に答える 3

4

の定義はinsert次のようになります。

struct data_node * insert (struct data_node **p_first, int elem)

ただし、ヘッダーの宣言は次のようになります。

struct data_node * insert (struct data_node **, int, char *);

char *最後にそこに注意してください。おそらく、一致させるためにそれを削除する必要があります。

于 2013-06-10T16:53:32.257 に答える
4

関数には 3 つの引数があり、最初の 2 つだけを渡しています。

struct data_node * insert (struct data_node **, int, char *);

data_node*、次に 、int最後にchar*型へのポインタを渡す必要があります。

紛らわしいことに、関数の定義も宣言と一致せず、最後char*の定義が省略されています。

于 2013-06-10T16:52:22.703 に答える
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ません。

于 2013-06-10T16:54:28.307 に答える