這可能是一個壞問題,但我完全失去了。我有這樣的代碼:在列表中搜索節點兩個作品並不起作用
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,他們是相同的大小?男人說它排除了終止字節,但我不確定這一點。
對不起,如果該職位缺乏我不知道如何正確地呈現它。
我會想,知道'add_to_list'的作用(而不是要求我們信任它的同名)會與你的問題相關。另外,在聲明「它工作得很好」之前,尋找已知爲*的列表中的某些東西,而不是清楚地*不是*是否具有建設性。 – WhozCraig
在C中,通常不會比較「字符串」和「==」。你使用'str * cmp()'或其他類似的函數。否則,你只是比較字符串開始的內存地址... – twalberg
存在許多問題。我不認爲這是正常運行。 – BLUEPIXY