Reputation: 251
I have a question...How can I use an array of structs?I managed to create it,but I cannot use it in scanf and printf...I will post here only the part of my code that is necessary...
int main()
{
int r;
struct word *s;
s=(struct word*)malloc(sizeof(struct word));
struct word hashtable[100];
s->name=(char*)malloc(20*sizeof(char));
scanf("%s",s->name);
r=hashnumber(s->name);
char *name="example.txt";
if(hashtable[r]->name==NULL)
treecreation(&hashtable[r],s);
else
hashtable[r]=s;
printf("%s",hashtable[r]->name);
printresults();
system("pause");
return(0);
}
struct position
{
char *filename;
int line;
int place;
struct position *next;
};
struct word
{
char *name;
struct word *right;
struct word *left;
struct position *result;
};
And function treecreation is like:
void treecreation(struct word **w1,struct word *w2)
Do not bother with the rest of my functions...I believe that they work...The main problem is how to use that array of structs...Right now,my program does not compile,because of the "if" statement,the "treecreation" and the printf..What should I do?Any help would be appreciated...
Upvotes: 2
Views: 97
Reputation: 206747
The type of hashtable[r]
is struct word
. The type of &hashtable[r]
is struct word*
. That explains why you should not use &hashtable[r]
as an argument to treecreation
.
What you need to pass to treecreation
depends on what you are doing with the argument w1
in the function.
If you are allocating memory and assigning to *w1
, then, you need to use:
struct word* hashtable;
treecreation(&hashtable, s);
Upvotes: 0
Reputation: 288
Your program is not compiling beause your variable hashtable
has the wrong type.
You want to store s
in it. s
is a pointer to word. Therefore, you hashtable
has to be an array of pointers to word:
struct word *hashtable[100];
Now, when you call treecreate
you just need to pass the word:
treecreation(hashtable,s);
Upvotes: 3
Reputation: 181932
The ->
operator is for selecting a field from a struct via a pointer to that struct. hashtable[r]
is a struct, not a pointer to one. You use the ordinary .
operator to select a member, just as if you were operating on a scalar struct word
(which you are):
if (hashtable[r].name == NULL) {
...
Upvotes: 0