我想知道如何为给定平台固定字符串长度的上限(以C表示).
我仔细检查了许多库,其中大多数库都是任意定义的. GNU C STL(具有实验性C 0x功能的STL)具有相当的定义:
size_t npos = size_t(-1); /*!< The maximum value that can be stored in a variable of type size_t */
size_t _S_max_len = ((npos - sizeof(_Rep_base))/sizeof(_CharT) - 1) / 4; /*!< Where _CharT is a template parameter; _Rep_base is a structure which encapsulates the allocated memory */
这是我对公式的理解:
> size_t类型必须保存分配给字符串的单位数(其中每个单位均为_CharT类型)
>理论上,size_t类型的变量可以采用的最大值是可以分配的1字节(即char类型)的单位总数
>因此,前一个值减去跟踪分配的内存(_Rep_base)所需的开销是字符串中最大的单元数.将此值除以sizeof(_CharT),因为_CharT可能需要一个以上的字节
>从前一个值中减去1,以得出一个终止字符
>最后,将除法除以4.我绝对不知道为什么!
我在很多地方进行了解释,但找不到任何令人满意的解释(这就是为什么我一直在努力弥补问题!如果我错了,请纠正我!).