您可以自由地共享和演绎本文稿, 只需遵守开源协议[CC By 4.0]
如果这篇文章帮助到你, 可以请我喝一杯咖啡~
9. C字符串的基础
在C语言中,字符串实际上是使用null
字符'\0'
终止的一维字符数组。因此,一个标准的字符串实际的占用空间比能够看到的字符数多1个字节(8位)。
字符串通常使用如下的方式初始化
char string[] = "Amachi";
C编译器会在使用上述初始化时自动推导数组长度(7,有一个\0
),并且自动为其末尾增添一个\0
。
使用如下的显式初始化也是可以的
char string[7] = {'A', 'm', 'a', 'c', 'h', 'i', '\0'};
但请为数组留出足够的长度来放一个\0
。
10. C字符串标准库
- 字符串操作算法
char* strcpy(char* target, char* str)
:将str
指向的串拷贝到target
指向的内存空间,并返回target
。需要str
串有\0
截止符。不会改变target
的空间,可能会冲毁堆栈。char *strcat(char *target, const char *str)
:将str
指向的串复制到target
串的末尾,并返回target
。需要均有\0
符号。不会改变target
的空间,可能会冲毁堆栈。int strcmp(const char *str1, const char *str2)
:比较两个串的字典序,返回值为0表示完全相同,返回值为正表示str1的字典序较大,为负表示str2的字典序较大。char *strchr(const char *str, int c)
:在str中找到c第一次出现的位置并返回其指针。若未找到则返回0char *strstr(const char *haystack, const char *mode)
:模式匹配。在haystack中找到mode第一次出现的位置,并返回其指针,若未出现则返回0。int strlen(char*)
:获取字符串长度(不含’\0’)。
- 输入输出及格式化输入输出
gets(char*)
用于输入一整行字符串,自动加\0
,不会分配内存空间。puts(chhar)
用于输出字符串。scanf / printf("%s", char*)
用于输入 / 输出字符串,但遇到空格会终止读取。
11. 转义字符
除了常见的转义字符外,C支持形如\ddd
(8进制)或\xdd
(16进制)来直接将8或16进制的ASCII码转换为字符。输入超出ASCII范围的转义字符是未定义的行为。
如果\
后的模式未能匹配所有的转义模式,那么C编译器会直接忽视掉\
,重新进行词法分析。故串"EOF\=-\61\""
的串长度是8,数组长度是9。