2015-04-05 41 views
1

我有以下功能:解析字符數組到數組函數

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; 

但是我得到這個錯誤「傳遞'void'給不兼容類型的參數const char * '「兩次(每個strcpy爲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空着。

從它的外觀來看,你試圖用功能性風格ala lisp進行編程。小心,你的功能get_name破壞性,所以它會修改newname

0

get_name被聲明爲返回void,因此在調用strcpy(first->name, get_name(new_name));時,您試圖將nothing(void)複製到first-> name中。