字符串(String)是由一系列字符组成的序列,是编程中重要的组成部分。遗憾的是, C
没有原生的 String
这一类型,取而代之的是, C
使用以 '\0'
结尾的 char
数组来表示字符串。
字符串的初始化
字符串的声明同 char
类型数组。在声明后,为处理内部的垃圾数据,需要初始化。字符串初始化可以像普通数组一样使用初始化器,也可以直接将字符串常量赋值给 char
数组。
1 | char str1[6] = {'H','e','l','l','o','\0'};//'\0'是空字符,又称结束符,ASCII编码为0 |
在使用初始化器时,若未包含结束符,在使用这一不完整字符串时,程序会在内存中顺次查找,确定字符串边界,直到遇到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
预处理器引入。
写在最后
字符串储存字面数据,在程序中十分重要,虽不是原生类型但是胜似原生类型。