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 区段,为只读区段,因此会导致字符串只读。

转义符

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

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

转义字符 描述 使用
\
(在行尾)
续行符 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

写在最后

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

留言