在列表中搜索节点既有效又无效
Searching node in list both works and does not work
这可能是个糟糕的问题,但我完全迷路了。我有这个代码:
struct nodoTemas* search_in_list(char * val, struct nodoTemas **prev,struct nodoTemas *head/*, struct nodoTemas *curr*/)
{
struct nodoTemas *ptr = head;
struct nodoTemas *tmp = NULL;
bool found = false;
printf("\n Searching the list for value [%s] \n",val);
while(ptr != NULL)
{
if(ptr->nombreTema == val)
{
found = true;
break;
}
else
{
tmp = ptr;
ptr = ptr->next;
}
}
if(true == found)
{
if(prev)
*prev = tmp;
return ptr;
}
else
{
return NULL;//si no ha encontrado nada devuelve NULL
}
}
然后我测试它,在一个特定的文件中测试它,像这样:
char * var="tema1";
char * var2="tema2";
head=add_to_list(var,true,head,curr);
curr=head;
curr=add_to_list(var2,true,head,curr);
struct nodoTemas* nodoBuscado;
char *temaABuscar="tema4";
nodoBuscado=search_in_list(temaABuscar, NULL,head);
if(nodoBuscado!=NULL)
printf("VALOR DEL NODO %s\n",nodoBuscado->nombreTema);
无论我做什么,它都能完美运行。如果我寻找存在的东西,它会打印它等等。现在在我的主文件上,我得到了 char * 我的服务器从消息中得到了 char *。我认为这失败了,所以我尝试了几种方法,这是其中之一:
printf("MATCH %d \n" , strcmp(temaRecibido,head->nombreTema));
结果我得到了 0。所以字符串是一样的。但是在另一个文件中搜索失败。我已经打印了它,我已经检查了它们的 strlen 尺寸,并且它们都匹配。
所以我相信我看错了一面,但我不明白为什么在一个地方工作的代码在其他地方不起作用。我应该在其他地方寻找错误吗?另外,如果我对带有 null 的字符串和不带 null 的字符串进行 strlen,它们的大小是否相同?男人说它排除了终止字节,但我不确定这一点。
很抱歉,如果缺少 post,我不确定如何正确呈现它。
你不能比较像
这样的字符串
if(ptr->nombreTema == val)
你应该使用 strcmp
if(strcmp(ptr->nombreTema, val) == 0)
我不确定您是否可以用这种方式比较 C 中的字符串...
如果您搜索字符串 "tema1" 而不是指向 "tema1" 的指针,结果是什么?
另外,检查这个 http://www.wikihow.com/Compare-Two-Strings-in-C-Programming.
这可能是个糟糕的问题,但我完全迷路了。我有这个代码:
struct nodoTemas* search_in_list(char * val, struct nodoTemas **prev,struct nodoTemas *head/*, struct nodoTemas *curr*/)
{
struct nodoTemas *ptr = head;
struct nodoTemas *tmp = NULL;
bool found = false;
printf("\n Searching the list for value [%s] \n",val);
while(ptr != NULL)
{
if(ptr->nombreTema == val)
{
found = true;
break;
}
else
{
tmp = ptr;
ptr = ptr->next;
}
}
if(true == found)
{
if(prev)
*prev = tmp;
return ptr;
}
else
{
return NULL;//si no ha encontrado nada devuelve NULL
}
}
然后我测试它,在一个特定的文件中测试它,像这样:
char * var="tema1";
char * var2="tema2";
head=add_to_list(var,true,head,curr);
curr=head;
curr=add_to_list(var2,true,head,curr);
struct nodoTemas* nodoBuscado;
char *temaABuscar="tema4";
nodoBuscado=search_in_list(temaABuscar, NULL,head);
if(nodoBuscado!=NULL)
printf("VALOR DEL NODO %s\n",nodoBuscado->nombreTema);
无论我做什么,它都能完美运行。如果我寻找存在的东西,它会打印它等等。现在在我的主文件上,我得到了 char * 我的服务器从消息中得到了 char *。我认为这失败了,所以我尝试了几种方法,这是其中之一:
printf("MATCH %d \n" , strcmp(temaRecibido,head->nombreTema));
结果我得到了 0。所以字符串是一样的。但是在另一个文件中搜索失败。我已经打印了它,我已经检查了它们的 strlen 尺寸,并且它们都匹配。
所以我相信我看错了一面,但我不明白为什么在一个地方工作的代码在其他地方不起作用。我应该在其他地方寻找错误吗?另外,如果我对带有 null 的字符串和不带 null 的字符串进行 strlen,它们的大小是否相同?男人说它排除了终止字节,但我不确定这一点。
很抱歉,如果缺少 post,我不确定如何正确呈现它。
你不能比较像
这样的字符串if(ptr->nombreTema == val)
你应该使用 strcmp
if(strcmp(ptr->nombreTema, val) == 0)
我不确定您是否可以用这种方式比较 C 中的字符串... 如果您搜索字符串 "tema1" 而不是指向 "tema1" 的指针,结果是什么? 另外,检查这个 http://www.wikihow.com/Compare-Two-Strings-in-C-Programming.