如何在C中使用'char * name []'之类的字符?

时间:2014-02-21 19:12:03

标签: c char

我正在编写一个名为List Maker的Windows API应用程序。

我有一个列表数据的结构,如下所示:

typedef struct LMLIST
{
    LPSTR filename;
    char title[128];
    char author[128];
    BOOL openSuccess;
    char *contents[];
    int numLines;


}LMLIST;

然而,编译器抱怨说:

Error   1   error C2229: struct 'LMLIST' has an illegal zero-sized array    c:\users\ian duncan\documents\github\listmakerforwindows\listmakerforwindows\listmakerlist.h    11  1   ListMakerForWindows

其中涉及char *contents[]

我的想法是拥有一个char数组,每个项目都是一个列表项,如下所示:

[0] List Item 1
[1] List Item 2
[2] List Item 3
...

很像char *argv[]

这是可能的,如果没有,还有另一种方法吗?

2 个答案:

答案 0 :(得分:3)

使用char **contents并动态分配字符指针数组:

LMLIST x;
...
x.contents = malloc(numstrings * sizeof (char *));

如果您没有在其他地方存储字符串数,则需要在字符串数中加一,以便为终止NULL指针腾出空间:

x.contents = malloc((numstrings + 1) * sizeof (char *));
x.contents[numstrings] = NULL;

这实质上是argv的分配方式。

答案 1 :(得分:3)

使用char **并使用malloc分配您的阵列成员。