链接列表数组类型“ NAME”(又名“ char [41]”)不可分配

时间:2019-02-20 01:47:30

标签: c linked-list

我正在搜索链表上的名字,但是遇到一些问题

这些是结构

typedef struct list
{
    void *data;
    struct list *next;
} LIST;
typedef char NAME[41];


/*
irrelevant structure here

*/


typedef struct person
{
    NAME name;
    int age;
    float height;
    DATE bday;
} PERSON;

这是找人的功能

PERSON *findPersonInDatabase(char *name)
{
    LIST *current = head;
    if (current == NULL) {
        printf("empty fam");
    }

    // PERSON* tryout;
    // tryout->name = name;

    while (current != NULL) {
        PERSON* p = (PERSON*) current->data;

        if (p->name == name) {
            printf("please");
            return p;
        }
    }

    return NULL;
}

我相信我遇到的问题与此有关 当我检查是否存储在NAME ==类型char *类型中的数据或它不起作用时,但是当我打印出这些类型中的数据时,我得到了我想要的值。我的问题是我该如何进行这项工作?

1 个答案:

答案 0 :(得分:0)

这不是比较字符串的正确方法:

if (p->name == name) {

这会将存储在name中的指针地址与p->name的第一个元素的地址进行比较。这将永远是错误的。要比较字符串,您需要strcmp函数:

if (strcmp(p->name,name) == 0) {

这是一个问题,但与您得到的错误无关。那是在向name的{​​{1}}字段赋值。由于此字段是一个数组,因此无法分配给它。您可能想要的是struct list,它用于复制字符串。例如:

strcpy