C11将“字符串”定义为:
string 是由and结尾的连续字符序列 包括第一个空字符。 §7.1.11
它早先将“字符”定义为:
3.7 字符
用于组织,控制或表示数据的一组元素的成员 3.7.1 的字符
单字节字符
适合字节的位表示 3.7.2 多字节字符
表示扩展字符集成员的一个或多个字节的序列...3.7.3 广泛的性格
值由wchar_t类型的对象表示,能够表示任何字符 在当前的区域设置
问题:“字符串”的定义中使用了“字符”的定义:
3.7中的“字符”,
3.7.1中的“字符”,
或其他什么?
答案 0 :(得分:3)
字符串是char
类型的连续数据序列
单词"字符"用于两种意义,抽象和实用
从抽象的角度来看,我们首先必须定义概念"字符集",以便稍后转到3.7并说出#34;一组元素的成员。 ..&#34 ;.
这个"字符"的定义符合另一个标准:ISO / IEC 2382-1。
在那里,您可以分析与"信息表示"相关的大量术语列表。
我的简短回答:"字符"在"字符串"的定义中对应于c11.3.7.1。
解释如下:
摘要中的字符
符号是人类的知识分子
所以," A"的抽象符号;是一种惯例,我们用它来识别不同的图表"比如A, A , A ,因为所有"相同"事情(一条信息,说)。
然后,通过一组(抽象)字符的有序和有限序列来表示信息
接下来,您需要对这些抽象符号进行编码,以使其在信息系统(计算机)中的表现成为可能
通常,这是通过定义整数(称为代码点)与给定集合中的对应字符之间的一对一对应来完成的。
编码架构是指一组字符与特定数字(代码点)相关联的方式。
此编码可以从一个系统更改为另一个系统(" A"在EBCDIC中的编码与ASCII中的编码不同)。
最后,我们将一个"图表"每个字符+代码点,即书面表示,最终可以打印或显示在屏幕上
图形的形状可以根据字体设计而改变,因此定义术语"字符"不是一个好的起点。
字符C
在3.7.1中。似乎C11指的是"字符"的另一个含义,意图是说"单字节字符"的简短形式。它讨论的是代码点(即与#34相关的整数;给定集合的抽象字符"),它们恰好适合1个字节。
在这种情况下,我们需要字节的定义
在C中,字节是信息存储单元,由 n 位的有序序列组成,其中 n 是大于或等于的整数等于8(当然一般是8),通过检查CHAR_BIT
中的常量<limits.h>
可以找到它的值。
有些数据类型的大小正好是1个字节:char, unsigned char, signed char
unsigned char
的值范围恰好是 0 ... 2 ^ n - 1 ,其中 n 是CHAR_BIT
。
char
的值范围与signed char
或unsgined char
一致,但C11并未说明哪些值与char
相对应。
此外,在任何情况下,类型char
必须与signed char
和unsigned char
不同。
现在,字符串是char
类型的对象序列。
为什么选择
标准根据char
:
(6.2.5.3)
声明为char类型的对象足以存储基本的任何成员 执行字符集。如果基本执行字符集的成员存储在a中 char对象,其值保证为非负。如果存储了任何其他字符 一个char对象,结果值是实现定义的,但应在范围内 可以在该类型中表示的值。
STRING
现在,C中的字符串是一个连续的(单字节)字符序列,以空字符结尾,在C中始终为0。 这个定义可以用抽象的方式再次理解,但是在7.1.1.1中,文本讨论了字符串的地址,因此必须理解一个&#34;字符串&#34;是记忆中的一个对象 A&#34;字符串&#34;然后,对象是一个连续的&#34;字节&#34;的序列,每个字节都包含一个字符的代码点。
这是因为&#34;字符&#34;旨在完全适合1个字节
它在C中用类型char
的数组表示,其最后一个元素是0.
MULTIBYTE CHARACTER
&#34;多字节&#34;的定义很复杂 它被称为一些特殊的编码模式,它使用可变数量的字节来表示(抽象)字符 您需要有关执行字符集的信息才能正确处理多字节字符集 但是,即使您有多字节字符,它仍然在内存中表示为字节序列。
这意味着您将再次将多字节字符串表示为array of char
。
执行系统解释这些字节的方式是另一个问题。
广泛的字符
宽字符是另一组(抽象)字符的元素,与char
类型中表示的字符不同。
这是一组&#34;宽字符&#34;大于&#34;单字节字符&#34;的集合
但事实并非如此。
&#34;广泛字符的相关事实&#34;如下:
wchar_t
类型的值范围表示。 char
类型中表示的字符不同。 因此,&#34;宽字符串&#34;是一个不同的对象而不是&#34;字符串&#34;。
结论
字符串与&#34;宽&#34;无关。字符,但只有&#34;单字节字符&#34;。
字符串是一个以空字符结尾的连续序列&#34; bytes&#34;,这反过来意味着某些char
类型的对象:char, signed char, unsigned char
,对应于一个代码点适合1个字节的抽象字符集。