2016-03-30 17 views
0

Bu kodla ilgili bir sorunum var. Beklediğim cevabı alamıyorum. Bunu aradım ama hiçbir şey bulamıyorum. Hatamı bulamıyorum .. İşte g_hash_table_contains beklenmeyen değeri döndürür

benim kod benim girişteki g_hash_table

# include <stdio.h> 
# include <glib.h> 
# include <stdlib.h> 

GHashTable *hash = NULL; 

int check_sth_blacklist(char *sth) 
{ 
    return g_hash_table_contains(hash,sth); 
} 

main() 
{ 
    hash = g_hash_table_new(g_str_hash,g_str_equal); 

    char *sth = (char*) malloc(32); 

    scanf("%s",sth); 
    g_hash_table_add(hash,sth); 


    scanf("%s",sth); 

    printf("%d\n",check_sth_blacklist(sth + sizeof(char)*2)); 


    free(sth); 
} 

ile çalışıyor yazıyorum:

cde 
abcde 

Ben cde dize g_hash_table için katacak düşünüyorum . sonra abcde dizesinde cde dize sorduğumda 0 değerini döndürür.

cevap

0

Malloc string'inizi g_str_hash altında bir GHashTable'a ilettiğinizde, dizgenin kontrolünü hash tablosuna dönüştürüyorsunuz - zaman geldiğinde serbest kalması, vb. o alan tahsisini tekrar kullanmamalısın!

senin karşılaştırma için yeni bir dize oluşturun:

#include <stdio.h> 
#include <glib.h> 
#include <stdlib.h> 
#include <string.h> 

GHashTable *hash = NULL; 

int check_sth_blacklist(char *sth) 
{ 
    return g_hash_table_contains(hash, sth); 
} 

int main() 
{ 
    hash = g_hash_table_new(g_str_hash, g_str_equal); 

    char *sth = (char*) malloc(32); 

    scanf("%s", sth); 
    g_hash_table_add(hash, sth); 

    char *nth = (char*) malloc(32); 
    scanf("%s", nth); 

    printf("%d\n", check_sth_blacklist(nth + 2)); 

    free(nth); 

    g_hash_table_destroy(hash); 

    return 0; 
} 

karma karma kendisi tahrip edildiğinde bağımsız ve freeable olmalıdır hepsi bunu (anahtar veya değer) koymak herhangi dizeleri, yönetsin. Çalıştırıldığında, bu bana çok verir:

bash-3.2$ ./a.out 
cde 
abcde 
1 
bash-3.2$ 
+0

. Bunu neredeyse buldum. beynimi parlak yapmak için thx)) – merdan

İlgili konular