我有以下功能:
void get_name(char *a)
{
char format[10];
sprintf(format, "%%%ds", SIZE-1);
scanf(format, a);
}
然后我在另一个函数中调用它,如下所示:
CListNode *initialize_list(int n)
{
CListNode *end, *new, *first;
CListNode *head=NULL;
int i;
char new_name[10];
first=(CListNode *) malloc(sizeof(CListNode));
strcpy(first->name, get_name(new_name));
first->next=head;
head=first;
for (i=0; i<n-1; i++) {
end=(CListNode *) malloc(sizeof(CListNode));
strcpy(end->name, get_name(new_name));
first->next=end;
end->next=NULL;
}
return end;
}
CListNode是
typedef struct node
{
char name[10];
struct node * next;
} CListNode;
但是我收到了这个错误&#34; 传递&#39;无效&#39;到不兼容类型的参数&#39; const char *&#39; &#34;两次(每次strcpy一次)。
我做错了什么?
答案 0 :(得分:0)
get_name
返回无效,因此在调用strcpy(first->name, get_name(new_name));
时,您尝试将任何内容(无效)复制到first-&gt;名称。
答案 1 :(得分:0)
而不是
strcpy(first->name, get_name(new_name));
你可以做到
get_name(new_name);
strcpy(first->name, new_name);
如果要保留strcpy(end->name, get_name(new_name));
行,请更改函数,使其返回指向输入的指针:
char *get_name(char *a)
{
char format[10];
sprintf(format, "%%%ds", SIZE-1);
scanf(format, a);
return a;
}
问题是strcpy(a,b)
将字符串b
复制到a
,但您的函数返回void
,因此strcpy是空手而归。
从它的外观来看,你正试图以功能性的方式进行编程。请注意,您的函数get_name
具有破坏性,因此会修改newname
。