2010-12-21 103 views
5

我有一个数组,看起来像这样:数组c与串 - 操纵/访问

struct table_elt 
{ 
    int id; 
    char name[]; 
} 

struct table_elt map[] = 
{ 
    {123,"elementt1"}, 
    {234,"elt2"}, 
    {345,"elt3"} 
}; 

我试图通过地图[1]。名称等,以访问这些元素然而,它似乎无法正确获取元素,并且我得到了随机垃圾。我认为这是因为编译器不知道元素会因变化而落地。解决这个问题的最好方法是什么,同时仍然保持灵活性和简单性?

回答

8

你可能想:

struct table_elt 
{ 
    int id; 
    const char *name; 
} 

struct table_elt map[] = 
{ 
    {123,"elementt1"}, 
    {234,"elt2"}, 
    {345,"elt3"} 
}; 

在一个侧面说明,table_elt甚至不需要一个名字,如果它仅在这种情况下使用。

1

您不能在table_elt结构中有一个未定义长度的数组。您可以将其更改为char *,并将它指向其他地方分配的char数组,或者为您的数组选择合适的长度并将其包含在结构定义中:

struct table_elt 
{ 
    int id; 
    char name[15]; 
} 
+0

此作品太! – jetru 2010-12-22 06:53:27