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

Eri*_*rik 6 c arrays syntax pointers

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

char* data[STRLENGTH]是不正确的语法.char** data大部分都有效但后来sizeof(data[0])却错了 - 应该等于STRLENGTH.

zmb*_*mbq 10

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

typedef char fixed_string[STRLENGTH];
fixed_string *data;
Run Code Online (Sandbox Code Playgroud)


Dan*_*her 6

char* data[STRLENGTH]
Run Code Online (Sandbox Code Playgroud)

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

char (*data)[STRLENGTH]
Run Code Online (Sandbox Code Playgroud)

  • data是一个指针,因此没有衰减问题。数据[i](OTOH)是一个数组表达式,如果传递给函数,它将*衰减为指针。 (2认同)

Joh*_*ode 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);
Run Code Online (Sandbox Code Playgroud)

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