-1

这在 C 中是什么意思:

char strings[USHRT_MAX][50];

它是否创建了一个称为字符串的锯齿状字符数组?

4

2 回答 2

5

不,上面不会创建一个锯齿状的字符串数组。它创建了一个二维字符数组,能够存储最多USHRT_MAX49 个字符的 C 字符串(第 50 个字符char用于'\0'终止符)。

锯齿状数组声明如下所示:

char *strings[USHRT_MAX];

使用指针数组,您需要为各个字符串分配内存,但字符串的长度可能因一个元素而异。另一方面,您的数组已分配所有内存,但它限制了字符串的长度,并且有可能使用比存储较短字符串所需的更多内存。

于 2013-04-01T12:18:57.173 回答
0

这个:

char strings[USHRT_MAX][50];

只提供一个二维字符数组。大小为USHRT_MAX50。这不是锯齿状数组,锯齿状数组是具有不同长度行的数组,从概念上讲是:

strings[0] = ['a']['\0']
strings[1] = ['j']['a']['g']['\0']
strings[2] = ['a']['r']['r']['a']['y']['\0']

你的更像是:

strings[0] = ['a']['\0'][ ][ ][ ][ ]
strings[1] = ['j']['a']['g']['\0'][ ][ ]
strings[2] = ['a']['r']['r']['a']['y']['\0']

请注意,在第二个示例中,它们在每行中都有相同数量的元素,但并非所有元素都被填充。

于 2013-04-01T13:06:10.413 回答