如果条件和逻辑比较不起作用

时间:2015-07-02 08:11:22

标签: c if-statement conditional-statements logical-operators

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),这不起作用,我不知道为什么。

我做错了吗?

3 个答案:

答案 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 !!!");