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

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.