我正在编写一个名为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[]
这是可能的,如果没有,还有另一种方法吗?
答案 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
分配您的阵列成员。