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