我有以下结构:传递char数组为结构构件
struct hashItem {
char userid[8];
char name[30];
struct hashItem *next;
};
在功能下面我采取一个字符指针(char数组)的论点,即我想要分配到该结构。
void insertItem(struct hashItem *htable[], char *userid, char *name)
{
int hcode = hashCode(userid);
struct hashItem *current = htable[hcode];
struct hashItem *newItem = (struct hashItem*) malloc(sizeof(struct hashItem));
newItem->userid = userid;
newItem->name = name;
[...]
}
相反,我得到以下错误:
hashtable.c: In function ‘insertItem’:
hashtable.c:62: error: incompatible types in assignment
hashtable.c:63: error: incompatible types in assignment
线62和63是`的newitem - > ...”行
假设我在代码中的其他位置确定char数组长度小于给定的8/30字节长度,我将如何直接分配它并不复制它? – 2009-09-21 15:38:56
在这种情况下,您会在结构中使用char *,并将指针复制到其中。 char *只是指向某些包含字符的内存的指针。 char []是n个字符的固定长度存储分配。你不能以合理的方式在它们之间进行分配。 – 2009-09-21 15:43:03
@Christian:确定长度与您是否分配或复制无关。你不能分配给C中的数组。该语言不允许。您必须决定是否希望新的hashItem包含传递给insertItem的字符串副本(在这种情况下,使用某种副本以及某种边界检查)或指向它的指针(在这种情况下,使用char *而不是结构中的char [])。 – 2009-09-21 15:55:45