C-字符串
简介
字符串(character string),是多个字符的序列,由一对双引号包裹。如"Hello World!"
;其中的双引号不是字符串的一部分,仅告知编译器其中的内容是字符串。
char数组
C语言没有专门用于存储字符串的数据类型,而是将其存储在char类型的数组中。
数组是一个相同数据类型元素组成的有序序列,由连续的存储单元组成。
字符串中的字符存储在相邻的存储单元中,每个单元存储一个字符。数组的末尾位置是一个空字符(null character)\0
,C语言使用空字符标记字符串的结束,这意味着数组的容量至少比待存储的字符串中的字符多1。
空字符,是一个非打印字符,其ASCII码值是0,因此不是数字0。
如,声明一个10个字符的字符数组,赋值为”Hello World!”,其在内存的大致分布如下:
字符 与 字符串
字符’A’使用单引号,字符串”A”使用双引号。
‘A’是char类型,”A”是char数组,由字符’A’和'\0'
组成;
字符串的输入与输出
scanf()在读取输入时,当遇到第一个空白(空格/制表符/换行符)时,就不再读取输入。
因此,C语言提供了其他的输入函数(如fget()),用于读取一般字符串。
1 |
|
1 | 输入你的名字:Smith |
sizeof 与 strlen()
sizeof
运算符,是以字节为单位给出对象的大小,包括\0
;strlen()
函数,返回字符串的实际字符长度,不包括\0
;
sizeof 与 sizeof()
当运算对象是类型时,使用sizeof(),如sizeof(int),sizeof(char);
当运算对象时特定量时,使用sizeof或sizeof(),如sizeof name,sizeof(3,14);
因此,建议所有情况都使用sizeof()。
1 |
|
1 | 输入你的名字:Smith |
字符串常量
实际编程中,可能会用到一些固定的数值或者字符串,这些变量散落到代码的各个地方,难以维护。因此C提供了常量,方便我们统一管理不经常改动的变量。
通常,常量名为全大写。
符号常量(C预处理器)
使用预处理器在程序顶部定义符号常量(也称明示常量,mainfest constant),其语法为#define NAME value
,在编译程序时,代码中所有包含常量NAME的位置都会被替换为value,这个过程称为编译时替换(compile-time substitution)
如:
1 |