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

C 如果条件和逻辑比较不起作用,c,if-statement,conditional-statements,logical-operators,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

以下情况不起作用:

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;
    }
}
知道为什么吗

如果我比较
(“serverip”==“serverip”)
这一切正常

但是如果我说
(ptr->val==val)
,这不起作用,我也不知道为什么


我做错了什么吗?

因为您正在比较一个值和一个地址:

if (dat == dat2)
    printf("Hello !!!");
我认为很清楚为什么它不起作用。 解决方案(除了读取指针):

总结一下:

*dat = ptr->val; 
dat2 = val;

if (*dat == *dat2) //compare the 2 values 
如果
“==”
运算符工作正常,这可能仅仅意味着所比较的值不相等,但不一定是正确的值。您确定您的
ptr
指针已初始化到正确的地址吗? 试着打印这两个值,看看问题是否真的在比较中。
在我看来,问题在于指针没有指向正确的地址。

此时您只是在比较指针地址。您可能需要比较字符串内容,为此需要使用strcmp()。它将返回输入字符串之间的差值,如果它们相等,则返回值为0

因此,请尝试以下方法:

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

printf(“你好世界%s……%s”,dat,dat2)你在这里得到了什么?你可以改为评论这个。欢迎使用Stack overflow…只有当您觉得它确实解决了原始帖子(OP)时,您才能编写答案。给出一个概括的陈述对这个人没有帮助。在这种情况下,您应该向问题添加注释。请尝试打印dat->val和*dat2;也许这两者其实并不相同。我不知道你为什么期望它们是一样的,代码中没有任何东西表明它们必须是一样的。我只是意识到我犯了一个错误并改正了它。试试这个版本,这不是问题所在。问题是,他试图比较C中两个==的字符串,这根本不起作用。他需要改用strcmp(),然后它应该会工作。@pfannkuchen\u gesicht你在说什么?比较在两个字节或字符之间;Strcmp()表示字符串;事实上,您正在处理char*并不意味着您正在处理字符串。从问题中可以清楚地看出,他想要比较两个字符串,请看问题的结尾“知道为什么吗。如果我比较(“serverip”=“serverip”),这就行了。”。另外,他希望在printf语句中使用%s打印val这一事实也是一种泄露。如果您不理解OPs问题的意图,请不要对答案进行向下投票。@Pandrei char*指针可以指向字符串。同样,从问题中可以清楚地看出,他想要比较两个字符串,请参见问题的结尾“知道为什么吗。如果我比较(“serverip”==“serverip”),这一切正常…”@user1421147没问题!:)如果你喜欢这个答案,请接受它,因此问题被标记为已解决。
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
if (strcmp(dat, dat2) == 0)
  printf("Hello !!!");