使用函数将char数组解析为数组

时间:2015-04-05 21:42:58

标签: c arrays function

我有以下功能:

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一次)。

我做错了什么?

2 个答案:

答案 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