从不兼容的指针类型分配问题

时间:2014-10-18 22:54:16

标签: c pointers uthash

嘿所以我试图尝试读取文件,将其存储在哈希中然后复制它。但是我得到了不兼容的指针类型

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};时代码有效 但它不适用于我的代码。请帮忙。

1 个答案:

答案 0 :(得分:0)

lines被声明为char指针的数组,但不会为它们指向的字符串分配任何空间。在您的工作版本中,编译器负责为每个字符串分配空间。

另外,你不能使用strcpy将80个指针的数组复制到1024个指针的数组中。 相反,您读入的每一行都需要分配空间才能被读入;然后可以将每个地址分配给names的元素。实际上,正如@BLUEPIXY建议的那样,line应该是一个包含80 char s的数组,而不是一个包含80个指针到char s的数组。或者您可以malloc为每个新行添加空格,并将该行的地址放入names