Προς το περιεχόμενο

Χειρισμος pointer μεσα σε struct


jimacos89

Προτεινόμενες αναρτήσεις

Δημοσ.

έχω ένα πρόβλημα στο να πάρω δεδομένα μέσα από κάποιες δομές.

έχω τις παρακάτω δομές

 

typedef struct htcell {

struct htcell *next;

const void *key, *value;

} *HashTableCell;

 

typedef struct val{

char* path;

char* HTM_code;

int html_len;

int html_version;

}val;

 

Στο *value βάζω μια struct τύπου val.

 

Αυτό που θέλω, είναι όταν πάρω ένα HashTableCell να έχω πρόσβαση στην τιμή html_version.

 

HashTableCell HCell;

int version;

 

version = &(HCell->value.html_version);

 

το παραπάνω δεν μου αναγνωρίζει όμως το περιεχόμενο του value.

 

καμία ιδέα?

Δημοσ.

στείλε ένα ολοκληρωμένο παράδειγμα(κώδικα)

 

 

 

version = PathVersion(unl);

 

key = strhash(unl);

 

Hcell= Malloc(sizeof(HashTableCell));

Hcell = HashTable_find(&cache,&key);

 

//version2 = &(Hcell->value->html_version);

 

βασικα αυτο το κομματι ειναι που κολλαω.. οπου το version einai int;

το Malloc ειναι συναρτηση δικη μας και το Hcell ειναι επιστροφη τυπου HashTableCell, και cache το HashTable που οριζω

το θεμα ειναι οτι δεν μπορω να παρω την τιμη απο το εσωτερικο struct. Μου βγαζει οτι το html_version δεν ανηκει στο struct.

Δημοσ.

αυτό βοηθάει?

 

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

typedef struct val{
   char* path;
   char* HTM_code;
   int html_len;
   int html_version;
}val;

typedef struct htcell {
   struct htcell *next;
   const void *key;
   val *value;
} *HashTableCell;

int main(){
   
HashTableCell HCell;
HCell=(HashTableCell)malloc(sizeof(struct htcell));
HCell->next=NULL;
HCell->key="aaa";
val * new1=(val *) malloc(sizeof(struct val));
new1->html_version=5;
HCell->value=new1;
int version;
version = HCell->value->html_version;
printf("\n version=%d",version);
getchar();
return 0;
}

Δημοσ.

αμα το οριζαμε εμεισ το HCell θα μπορουσαμε να το κανουμε ετσι! το HCell το παιρνουμε απο την συναρτηση HashTableFind()

HashTableCell HashTable_find(HashTable *this, const void* key)

{

size_t h;

 

h = ht_bucket(this, key);

return ht_find(this, this->table[h], key);

}

 

static size_t ht_bucket(HashTable* this, const void* key)

{

return this->hfunc(key) % this->tsize;

}

 

static HashTableCell ht_find(HashTable *this, HashTableCell c, const void* key)

{

while(c != NULL) {

if(this->eqpred(c->key,key)!=0) break;

c = c->next;

}

return c;

}

 

οπότε στην ουσια έχει ήδη τιμή. Το θέμα ειναι να την πάρω για να την χρησιμοποιήσω.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...