LINUX.ORG.RU

почему не видно хеш (часть 2)


0

0

Если либа search.h (из glibc) своей функцией hcreate создает 
глобальный (всмысле видимости) хэш, то почему (заполняя хеш 
следующим образом: http://observ.inetcomm.ru/images/test.c.html), 
не печатаются данные, которые содержатся в этом самом хеше (строчки 
без квадратных скобочек означают, вроде бы как, что данные в хеш 
были добавлены):

$ $ gcc test.c;./a.out
      2 2 ->      NULL:0
      2 3 ->      NULL:0
      3 2 ->      NULL:0
      3 3 ->      NULL:0
[      2 2 ->      NULL:0 ]
[      2 3 ->      NULL:0 ]
[      3 2 ->      NULL:0 ]
[      3 3 ->      NULL:0 ]
$

может я чего-то не дочитал в мануалах? И можно ли 
как-то заставить видеть хеш при таком его заполнении? 

спасибо за ответ!
☆☆

но причем вот эта штука - работает без вопросов:

#include <stdio.h>
#include <search.h>

int exists(ENTRY e ,ENTRY *ep ,char *k, int num,int n){
  int i;
  int bool;
  e.key = k;
  ep = hsearch(e, FIND);
  if (ep){bool=1;} else {bool=0;}
  e.key=k;
  e.data = (char *)n;
  ep = hsearch(e, ENTER);
  if (ep == NULL) {
    fprintf(stderr, "entry failed\n");
    exit(1);
  }
  return bool;
}

int main() {
  ENTRY e, *ep;
  int ii=5; int n=1;
  hcreate(ii);
  if(exists(e,ep,"1 1",ii,n)){printf("true\n");} else {printf("false\n");}
  if(exists(e,ep,"2 2",ii,n)){printf("true\n");} else {printf("false\n");}
  if(exists(e,ep,"1 1",ii,n)){printf("true\n");} else {printf("false\n");}
  if(exists(e,ep,"2 2",ii,n)){printf("true\n");} else {printf("false\n");}
  return 0;
}

ладно, вобщем это уж не синтаксис и не "пунктуация", а, походу, 
чтобы сделать, писать надо прогу... 

vilfred ☆☆
() автор топика

Прости, но ты какую-то глупость делаешь.

В Entry передается указатель на данные. Подразумевается, что данные остаются доступными и дальше - это принципиалный момент, которого ты явно не понимаешь. Ты же туда просовываешь указатель на один и тот же num, который, кстати говоря, имеет недостаточный размер (туда должны помещаться две цифры, пробел и завершающий ноль).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.