嘿所以我试图尝试读取文件,将其存储在哈希中然后复制它。但是我得到了不兼容的指针类型
struct hash_struct {
int id;
char name[BUFFER_SIZE]; /* key (string WITHIN the structure */
UT_hash_handle hh; /* makes this structure hashable */
};
int main(int argc, char *argv[] )
{
char *lines[80];
FILE* fp = fopen("file.txt","r");
if(fgets(*lines, BUFFER_SIZE, fp) != NULL)
{
puts(*lines);
// do something
}
fclose(fp);
const char **n;
char *names[1024];
strcpy(*names, *lines);
struct hash_struct *s, *tmp, *users = NULL;
int i=0;
for (n = names; *n != NULL; n++)
{
s = (struct hash_struct*)malloc(sizeof(struct hash_struct));
strncpy(s->name, *n,10);
s->id = i++;
HASH_ADD_STR( users, name, s );
}
HASH_FIND_STR( users, "joe", s);
if (s) printf("joe's id is %d\n", s->id);
printf("Hash has %d entries\n",HASH_COUNT(users));
/* free the hash table contents */
HASH_ITER(hh, users, s, tmp) {
HASH_DEL(users, s);
free(s);
}
return 0;
}
我初始化const char **n, *names = {array elements here};
时代码有效
但它不适用于我的代码。请帮忙。
答案 0 :(得分:0)
lines
被声明为char
指针的数组,但不会为它们指向的字符串分配任何空间。在您的工作版本中,编译器负责为每个字符串分配空间。
另外,你不能使用strcpy
将80个指针的数组复制到1024个指针的数组中。
相反,您读入的每一行都需要分配空间才能被读入;然后可以将每个地址分配给names
的元素。实际上,正如@BLUEPIXY建议的那样,line
应该是一个包含80 char
s的数组,而不是一个包含80个指针到char
s的数组。或者您可以malloc
为每个新行添加空格,并将该行的地址放入names
。