第一次看C
,我发现一个字符串实际上是一个char[]
- 我想知道有多少种方法可以实现一个字符串数据类型?
对这个问题的评论(Why does a string of N chars require initializing an array of N + 1 chars in C?)
对于字符串数据类型,您需要知道长度。您可以拥有一个具有长度字段(和char数组)的结构,或者您需要一个特殊的标记来表示字符串的结尾。在C中,选择了特殊标记方法,标记为空字符
意味着只有两种方法可以实现字符串结构?
char[]
char[]
的开头和其他必要元数据的指针是否有其他方法来实现字符串数据类型?为什么C
接近(1)?
为什么C采取接近(1)?
根据The Development of the C Language的说法,这是为了避免固定弦乐的最大长度,并且他们的个人经历使他们相信终结者更方便。
BCPL,B或C都不支持该语言中的字符数据;每个字符串都像整数向量一样对待字符串,并通过一些约定来补充一般规则。在BCPL和B中,字符串文字表示用字符串字符初始化的静态区域的地址,打包到单元格中。在BCPL中,第一个打包字节包含字符串中的字符数;在B中,没有计数,字符串由特殊字符终止,B拼写
*e
。这种改变部分是为了避免因在8位或9位插槽中保持计数而导致的字符串长度限制,部分原因是根据我们的经验,保持计数似乎不如使用终结器。
是否有其他方法来实现字符串数据类型?
没有什么显着不同,只要字符串被定义为由连续的字节组成。
请记住,C的开发主要是为了实现UNIX操作系统 - 文本处理不是它的重点。
将字符串和字符串操作映射到数组是有意义的,因为字符串是字符值序列。数组上的现有操作(例如它们)可以非常容易地应用于字符串。连接之类的一些操作变得简单易行。
使用终结符而不是前导长度字节意味着字符串长度没有上限。
有时候有一个真正的字符串数据类型会很好,不同于char
数组。但是,在大多数C编程中,这些时间足够少,而且这种方法足够好。