声明一个固定长度字符串的可变长度数组

时间:2012-05-21 20:31:58

标签: c arrays pointers syntax

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

char* data[STRLENGTH]语法不正确。 char** data大部分有效,但sizeof(data[0])错误 - 它应该等于STRLENGTH

3 个答案:

答案 0 :(得分:10)

@Daniel是正确的,但是这段代码可能会让读者感到困惑 - 这不是你通常做的事情。为了使其更容易理解,我建议你分两步完成:

typedef char fixed_string[STRLENGTH];
fixed_string *data;

答案 1 :(得分:6)

char* data[STRLENGTH]

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

char (*data)[STRLENGTH]

答案 2 :(得分:5)

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 - char元素数组的指针。 malloc调用将动态分配足够的内存来保存长度为rows的{​​{1}}数组。每个LEN都是data[i]类型。