我正在搜索链表上的名字,但是遇到一些问题
这些是结构
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 *类型中的数据或它不起作用时,但是当我打印出这些类型中的数据时,我得到了我想要的值。我的问题是我该如何进行这项工作?
答案 0 :(得分:0)
这不是比较字符串的正确方法:
if (p->name == name) {
这会将存储在name
中的指针地址与p->name
的第一个元素的地址进行比较。这将永远是错误的。要比较字符串,您需要strcmp
函数:
if (strcmp(p->name,name) == 0) {
这是一个问题,但与您得到的错误无关。那是在向name
的{{1}}字段赋值。由于此字段是一个数组,因此无法分配给它。您可能想要的是struct list
,它用于复制字符串。例如:
strcpy