定义
- C语言的字符串是以字符数组形式存在的
- 不能用运算符对字符串做运算
- 通过数组的方式可以遍历字符串
- 唯一特殊的地方是字符串字面量可以用来初始化数组
- 以及标准库提供了一系列字符串函数
字符类型
- char是一种整数,也是一种特殊的类型:字符
- 用单引号表示的字符字面量
'a','1'
"
也是一个字符printf
和scanf
里用%c来输入字符
逃逸字符
- 用来表达无法印出来的控制字符或特殊字符,由一个反斜杠
\
开头,后面跟上另一个字符,这两个字符结合起来,组成一个字符
字符串与数组
- 区别
char word[ ] = {'H','e','l','l','0','!','\0'};
是字符串
char word[] = {'H','e','l','l','0','!'};
不是字符串 - 以0(整数0)结尾的一串数组:
0
和'\0'
是一样的,但是和'0'
不同\ - 0标志字符串结束,但它不是字符串的一部分,计算字符串的长度时不包括这个0
- 字符串以数组的形式存在,以数组或指针的形式访问,更多的是以指针的形式
- 指针还是数组?
- 构造字符串—使用数组
- 处理字符串—使用指针
- 数组:这个字符串在这里
- 指针:这个字符串不知道在哪里
string.h
里由很多处理字符串的函数
字符串变量
char *str = "Hello";
char word[] = "Hello";
char line[10] = "Hello";
char* s = "Hello,world!";
- s是一个指针,初始化为指向一个字符串常量
- s是一个指针,初始化为指向一个字符串常量
- 但试图对s所指的字符串写入会导致严重的后果
- 如果需要修改字符串,应该用数组:
char s[] = "Hello,world!";
字符串常量
"Hello"
会被编译器变成一个字符串数组放在某处,这个数组的长度是6,结尾还有表示结束的0- 两个相邻的字符串常量会被自动连接起来
字符串的输入输出
char string[8];
scanf("&s",string);
printf("&s",string);
- scanf读入一个单词(到空格、Tab或回车为止)
- scanf是不安全的,因为不知道要读入的内容的长度
字符串函数
strlen
返回s的字符串长度(不包括结尾的0)strcmo
比较两个字符串strcpy
把src的字符串拷贝的dststrcat
把s2拷贝到s1的后面,换成一个长的字符串,且s1必须具有足够的空间