6

我需要一个字符串数组。字符串的长度在编译时是已知的,每个字符串占用这么多空间是至关重要的。另一方面,字符串的数量只有在运行时才知道。这个的语法是什么?

char* data[STRLENGTH]是不正确的语法。char** data大多数情况下有效,但随后sizeof(data[0])是错误的——它应该等于STRLENGTH.

4

3 回答 3

10

@Daniel 是正确的,但这段代码可能会让阅读它的人感到困惑——这不是你通常会做的事情。为了使其更易于理解,我建议您分两步进行:

typedef char fixed_string[STRLENGTH];
fixed_string *data;
于 2012-05-21T20:37:48.203 回答
7
char (*data)[LEN];                   // where LEN is known at compile time
...
data = malloc(sizeof *data * rows);  // where rows is determined at run time
...
strcpy(data[i], some_name);
...
printf("name = %s\n", data[i]);
...
free(data);

请注意,它data是指针类型,而不是数组类型(data是指向 的LEN-element 数组的指针char)。该malloc调用将动态分配足够的内存来保存rows长度数组LEN。每个data[i]都是 type char [LEN]

于 2012-05-21T20:58:04.713 回答
6
char* data[STRLENGTH]

STRLENTGH声明一个指向 的指针数组char。要声明指向STRLENGTH chars 数组的指针,请使用

char (*data)[STRLENGTH]
于 2012-05-21T20:36:14.427 回答