C:赋值中不兼容的类型

时间:2013-09-20 20:43:40

标签: c

 typedef char Last_t[MAXL];
 typedef char Rest_t[MAXR];

 typedef struct NodeTag {
 Last_t     Last;
 Rest_t     Rest;
 struct NodeTag *Link;
 }  Node;

typedef struct {
Node *Index[26];
Node *L;
} ContactList;

//参数接受char参数以将其设置为contact.Last

void INS( Node *cn   ) 
Node contactName;
contactName.Last= cn;
// temp->data=num;
//contactName.Rest=restName;

}

//无法弄清楚如何传递char参数

 int main(void)
 {

   INS("David"); 
 }

1 个答案:

答案 0 :(得分:2)

如果您希望void INS中的代码能够正常工作,那么

char *应该传递Node类型的参数,而不是main

要将其分配给成员Last,您必须使用strcpy或类似内容。这是因为您无法指定指向数组的指针。更具体地说,您无法将char *分配给char[MAXL]

你可以试试这个:

void INS( char * cn   ) {
    Node contactName;
    strncpy (contactName.Last, cn, MAXL);
}

int main(void){
    INS("David");
    return 0;
}

但是,这并不能很好地处理错误。这是一种更加错误安全的方法:

void INS (char * cn){

    Node contactName = {
        .Last[0] = 0,
        .Rest[0] = 0,
        .Link = 0
    };

    if (cn){
        strncpy (contactName.Last, cn, MAXL - 1);
        contactName.Last[MAXL - 1] = 0;
    }
}

int main (void){
    INS ("David");
    return 0;
}