C 什么是「;“字符”;字符串形式';什么是定义?
C11将“字符串”定义为:C 什么是「;“字符”;字符串形式';什么是定义?,c,language-lawyer,C,Language Lawyer,C11将“字符串”定义为: 字符串是以和结尾的连续字符序列 包括第一个空字符。§7.1.1 1 它先前将“字符”定义为: 3.7字符 〈摘要〉 用于组织、控制或表示数据的一组元素的成员 3.7.1 字符 单字节字符 〈C〉 适合字节的位表示 3.7.2 多字节字符 表示扩展字符集成员的一个或多个字节的序列 3.7.3 宽字符 由wchar\u t类型的对象表示的值,能够表示任何字符 在当前区域设置中 问题:在“字符串”的定义中使用了什么“字符”的定义: 3.7中的“字符” 3.7.1中的“字符”
字符串是以和结尾的连续字符序列 包括第一个空字符。§7.1.1 1 它先前将“字符”定义为: 3.7字符
〈摘要〉 用于组织、控制或表示数据的一组元素的成员 3.7.1 字符
单字节字符
〈C〉 适合字节的位表示 3.7.2 多字节字符
表示扩展字符集成员的一个或多个字节的序列 3.7.3 宽字符
由wchar\u t类型的对象表示的值,能够表示任何字符 在当前区域设置中 问题:在“字符串”的定义中使用了什么“字符”的定义:
3.7中的“字符”
3.7.1中的“字符”
还是别的什么?字符串是
char
类型的连续数据序列“字符”一词有两种含义,抽象和实用。
从抽象的角度来看,我们首先必须定义“字符集”的概念,以便稍后转到3.7并说“一组元素中的一员…”。
“字符”的定义符合另一个标准:ISO/IEC 2382-1 看 在那里,您可以分析一大串与“信息表示”相关的术语 我的简短回答:在“字符串”的定义中,“字符”对应于c11.3.7.1。
解释如下: 摘要中的字符 符号是人类的一种知识习俗。
因此,“A”的抽象符号是一种惯例,我们使用它来识别不同的“图形”,如A、A、A,它们都是“相同”的东西(比如一条信息)。
然后,信息由一组(抽象)字符的有序和有限序列表示。
接下来,您需要对这些抽象符号进行编码,以使其在信息系统(计算机)中的表示成为可能。
通常,这是通过定义整数(称为代码点)与给定集合中相应字符之间的一对一对应关系来实现的。
编码模式是一种将一组字符与某些数字(代码点)关联的方式。
此编码可以从一个系统更改为另一个系统(“A”在EBCDIC中的编码与在ASCII中的编码不同)。
最后,我们将一个“图形”与每个字符+代码点相关联,即一个书面表示,最终可以打印或显示在屏幕上。
图形的形状可以根据字体设计而改变,因此定义术语“字符”并不是一个好的起点 C中的字符 在3.7.1中。似乎C11指的是“字符”的另一种含义,是“单字节字符”的简写形式。它所说的代码点(即与“给定集合的抽象字符”关联的整数)正好适合1个字节。
在这种情况下,我们需要定义字节
在C语言中,字节是一个信息存储单元,由n位的有序序列组成,其中n是大于或等于8的整数(当然,通常是8),通过检查
中的常量字符位
,可以找到其值
有些数据类型的大小正好是1字节:char、unsigned char、signed char
无符号字符
的值范围正好是0…2^n-1,其中n是字符位
char
的值范围与signed char
或unsgined char
一致,但C11没有说明其中哪一个对应于char
此外,在任何情况下,必须将类型
char
视为不同于signed char
和unsigned char
现在,字符串是char
类型的对象序列
为什么使用字符?
本标准定义了字符的char
:
(6.2.5.3)
声明为char类型的对象足够大,可以存储基本类型的任何成员
执行字符集。如果基本执行字符集的成员存储在
char对象,其值保证为非负。如果任何其他字符存储在
对于char对象,结果值由实现定义,但应在范围内
可以在该类型中表示的值的集合
字符串
现在,C中的字符串是一个连续的(单字节)字符序列,以空字符结尾,在C中总是0。可以用抽象的方式再次理解该定义,但是在7.1.1.1中,文本讨论了字符串的地址,因此必须理解“字符串”是内存中的对象。
因此,“字符串”对象是一个连续的“字节”序列,每个字节包含一个字符的代码点 这源于一个事实,即一个“字符”正好适合1个字节。
它在C中由
char
类型的数组表示,其最后一个元素是0
多字节字符
“多字节”的定义很复杂。它是指一些使用可变字节数表示(抽象)字符的特殊编码模式。
为了正确处理多字节字符集,您需要有关执行字符集的信息。
然而,即使您有一个多字节字符,它仍然在内存中表示为一个字节序列 那意味着