2015-07-02 36 views
0
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) 
    printf("Hello !!!");** 

    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).....这不工作......不知道为什么。 我做错了什么......任何guesss ....

+0

'的printf(“世界你好%s的...... 。%s“,dat,dat2);'你在这里得到了什么? –

回答

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 
+0

我试过以上解决方案,但仍然无法正常工作。 – user1421147

+0

尝试打印dat-> val和* dat2;也许这两个实际上是不一样的。我不知道你为什么期望它们是相同的,代码中没有任何内容表明它们必须是。 – Pandrei

+0

我刚刚意识到我犯了一个错误,并纠正了它。试试这个版本。 – Pandrei

0

如果"=="操作正常工作,这可能仅仅意味着被比较的值不相等 - 但不一定是正确的。你确定你的ptr指针被初始化为正确的地址吗? 尝试打印这两个值来查看自己,如果问题确实存在于比较中。 它看起来问题是指针没有指向正确的地址。

+0

您可以改为评论。欢迎来到堆栈溢出...只有当你认为它真正解决了原始帖子(OP)时,你才会写出答案。给予一般性陈述并不能帮助这个人。在这种情况下,你应该添加一个评论来提问。 –

0

你只是比较指针地址在这一点上。你可能想要的是比较字符串内容,因为你需要使用strcmp()。它将返回的区别输入字符串之间,如果他们是平等的返回值为0

那么试试这个来代替:

if (strcmp(dat, dat2) == 0) 
    printf("Hello !!!"); 
+0

dat和dat2不是字符串,是指向char的指针。 – Pandrei

+0

@Pandrei char *指针可以指向字符串。同样从问题中可以清楚地看到他想要比较两个字符串,请参阅问题的结尾“任何想法为什么,如果我比较(”serverip“==”serverip“),这工作正常..” –

+0

谢谢你,伙计们! !!。它的工作和解决了我的问题。 – user1421147