struct data_struct * search_in_list(char * val, struct data_struct * * prev) {
char * dat = NULL;
char * dat2 = NULL;
struct data_struct * ptr = head;
struct data_struct * tmp = NULL;
bool found = false;
printf("\n Searching the list for value [%s] ...found is.%d\n", val, found);
while (ptr != NULL) {
printf("\n ptr !=null .....Searching the list for value ");
dat = ptr - > val;
dat2 = val;
printf("hello world %s.......%s", dat, dat2);
if (dat == dat2) // ** here **
printf("Hello !!!"); // ** here **
found = (val == ptr - > val);
printf("the data is%d", found);
if (found) {
printf("\n ptr val if......Searching the list for value [%s] ", ptr - > val);
found = true;
break;
} else {
printf("\n else found....Searching the list for value [%s] ", ptr - > val);
tmp = ptr;
ptr = ptr - > next;
}
}
if (true == found) {
ptr = ptr - > next;
printf("\n truefound...Searching the list for value [%s] ", ptr - > val);
if (prev)
* prev = tmp;
return ptr;
} else {
printf("\n Searching the list for value [%s] ", ptr - > val);
return NULL;
}
}
以下情况无效:
if (dat == dat2)
printf("Hello !!!");
知道为什么吗?
如果我比较("serverip" == "serverip")
,这可行。
但如果我说( ptr->val == val)
,这不起作用,我不知道为什么。
我做错了吗?
答案 0 :(得分:0)
因为您正在将值与地址进行比较:
char* val; //this is a pointer
struct data_struct *ptr = head; //this is also a pointer
char *dat=NULL; //pointer
char *dat2=NULL; //pointer
dat = ptr->val; //you assign a pointer the value of one element in a linked list?!
dat2 = val; //dat2 points to the same address as val
我认为很明显为什么它不起作用。 解决方案(除了阅读指针):
*dat = ptr->val;
dat2 = val;
if (*dat == *dat2) //compare the 2 values
总结一下:
char *p; //this is a pointer to char
p //this is the address p points to
*p //this is the value at the address p points to
答案 1 :(得分:0)
如果"=="
运算符正常工作,那可能只是意味着您所比较的值不相等 - 但不一定是正确的值。您确定ptr
指针已初始化为正确的地址吗?
如果问题确实存在于比较中,请尝试打印这两个值以查看自己。
在我看来,问题在于指针没有指向正确的地址。
答案 2 :(得分:0)
此时您只是比较指针地址。你可能想要的是比较字符串内容和你需要使用strcmp()。它将返回输入字符串之间的差异,如果它们相等,则返回值将为0。
所以试试这个:
if (strcmp(dat, dat2) == 0)
printf("Hello !!!");