C-字符串

1.2k 词

字符串(String)是由一系列字符组成的序列,是编程中重要的组成部分。遗憾的是, C 没有原生的 String 这一类型,取而代之的是, C 使用以 '\0' 结尾的 char 数组来表示字符串。

字符串的初始化

字符串的声明同 char 类型数组。在声明后,为处理内部的垃圾数据,需要初始化。字符串初始化可以像普通数组一样使用初始化器,也可以直接将字符串常量赋值给 char 数组。

1
2
3
4
char str1[6] = {'H','e','l','l','o','\0'};//'\0'是空字符,又称结束符,ASCII编码为0
//为了容纳结束符,字符串大小需要比字符数大
char str2[] = {'H','e','l','l','o','\0'};//可以自动推断数组大小
char str3[] = "Hello";//使用字符串常量

在使用初始化器时,若未包含结束符,在使用这一不完整字符串时,程序会在内存中顺次查找,确定字符串边界,直到遇到0时结束字符串边界判断。此时会造成字符串内容异常。

可以直接使用 char* 指向字符串常量,可以和 char[] 一样使用,但是二者有细微区别。使用字符串常量赋值给 char[] 时,编译器会复制字符串常量的值并赋值给变量; char* 则会直接指向字符串常量的地址。而字符串常量位于 .text 区段,为只读区段,因此会导致字符串只读。

转义符

在 ASCII 和 unicode 中,有许多特殊字符,无法通过键盘打出。这时候需要一些特殊的方法“打出”这些字符,于是转义符应运而生。

转义符是字符串中以反斜杠开头的特殊字符序列。在反斜杠后加各种字符即可在字符串内被解析为对应的特殊字符。

转义字符 描述 使用
\
(在行尾)
续行符 11\
45\
14
\\ 反斜杠符号 \\
\‘ 单引号 \'
\“ 双引号 \"
\a 响铃 \a
\b 退格符 \b
\0 空 \0
\n 换行符 \n
\r 回车符 \r
\t 水平制表符 \t
\v 垂直制表符 \v
\f 换页符 \f
\ooo 八进制数对应的字符(最多转义三位) \123456
\xhh 十六进制数对应的字符 \x1E23
\N{name} Unicod字符库中对应名称的字符 \N{space}
\uXXXX 16位十六进制数对应的Unicode字符 \u4E32
\UXXXXXXXX 32位十六进制数对应的Unicode字符 \UD83EDD13

字符串函数

C 在标准库 string.h 中定义了许多用于字符串操作的函数。在使用时,需要通过 include 预处理器引入。

见 C标准库-string.h

写在最后

字符串储存字面数据,在程序中十分重要,虽不是原生类型但是胜似原生类型。

留言