2013-04-13 45 views
4

在C中,我需要静态预分配一个数组数组,每个数组都与一个不同的字符串数组关联。下面的代码是否会这样做:C数组的字符串

struct number_and_strings { 
    int nnn; 
    char **sss; 
} 

static struct number_and_strings my_list[] = { 
    {12, {"apple","banana","peach","apricot","orange",NULL}}, 
    {34, {"tomato","cucumber",NULL}}, 
    {5, {"bread","butter","cheese",NULL}}, 
    {79, {"water",NULL}} 
} 
+2

为什么不试试看? –

+1

我担心的是它看起来会起作用,但由于对指针的一些误解,我最终会吞噬或泄漏内存。 –

+0

指针将指向数据段中的内存位置。没有泄漏。 –

回答

5

sss是指向指针的指针。所以指针数组不能直接分配给它。您可以使用复合文字(这是一个C99功能)进行如下分配:

static struct number_and_strings my_list[] = { 
     {12, (char*[]){"apple","banana","peach","apricot","orange",NULL}}, 
     {34, (char*[]){"tomato","cucumber",NULL}}, 
     {5, (char*[]){"bread","butter","cheese",NULL}}, 
     {79, (char*[]){"water",NULL}} 
    }; 
+0

这不是演员阵容,而是完全不同的东西,即复合文字。 (C语言和未命名对象的语法) –

+0

与ANSI C一起工作的任何类似内容? –

+0

@FreeBud不,AFAIK C89/90不支持它(但gcc支持它作为扩展)。如果你在C99模式下编译,应该没问题。例如,如果您使用的是gcc,那么:'gcc -std = c99 file.c'。 –