在列表中搜索节点既有效又无效

时间:2015-04-07 18:10:36

标签: c list search linked-list strcmp

这可能是一个糟糕的问题,但我完全迷失了。我有这段代码:

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。所以字符串是相同的。但搜索失败,在另一个文件中。我打印过它,我已经检查了它们的尺寸,这一切都是匹配的。

所以我相信我正在看错了,但我无法理解为什么在一个地方工作的代码在其他地方不起作用。我应该在其他地方寻找错误吗?另外,如果我对一个字符串WITH null和一个没有null的strlen执行strlen,它们是否大小相同?男人说它排除了终止字节,但我对此不确定。

对不起,如果帖子不足,我不确定如何正确呈现。

2 个答案:

答案 0 :(得分:1)

您无法比较

等字符串
if(ptr->nombreTema == val)

你应该使用strcmp

if(strcmp(ptr->nombreTema, val) == 0)

答案 1 :(得分:1)

我不确定你是否可以用这种方式比较C中的字符串... 如果你搜索字符串“tema1”而不是指向“tema1”的指针是什么结果? 另外,请检查此http://www.wikihow.com/Compare-Two-Strings-in-C-Programming