【C语言入门】字符串与转义字符
五、字符串与转义字符
1 字符串
这种由双引号引起来的一串字符称为字符串字面值(String Literal),或者称为字符串常量/字符串。
"hello world.\n"
注意:在字符串的结尾隐藏了一个字符串结束标志 \0
。通过 strlen
函数求字符串长度时,该字符不算作字符串内容。
1.1 示例1
以
%s
的格式打印字符数组
#include<stdio.h>
int main()
{
//字符串
char arr1[] = "hello";//[h、e、l、l、o、\0]
char arr2[] = { 'h', 'e', 'l', 'l', 'o' };//[h、e、l、l、o]
char arr3[] = { 'h', 'e', 'l', 'l', 'o', '\0' };//[h、e、l、l、o、\0]
printf("%s\n", arr1);//hello
printf("%s\n", arr2);//hello烫烫烫烫烫蘦ello
printf("%s\n", arr3);//hello
return 0;
}
解释说明:
1 上述三个数组都在创建时都进行了初始化。
2 %s
在 print
函数中,以%s格式打印输出字符串,从字符串首字符的地址开始,直到遇到字符串结束标志 \0
才停止。
arr2
数组中没有 \0
这一元素,当以 %s
格式打印字符串时,会越过原本数组范围继续寻找 \0
标志,直到遇到 \0
打印才停止。
3 其他说明
数组名表示数组首元素的地址,不能被修改(不能充当左值)。
1.2 示例2
使用
strlen
函数求字符数组(字符串)的长度
#include<stdio.h>
#include<string.h>
int main()
{
//字符串
char arr1[] = "hello";
char arr2[] = { 'h', 'e', 'l', 'l', 'o' };
char arr3[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
//strlen()函数,用来求字符串的长度
printf("%d\n", strlen(arr1));//5
printf("%d\n", strlen(arr2));//21(随机值)
printf("%d\n", strlen(arr3));//5
//测试%s遇到\0的情况
char arr4[] = { '\0', 'h', 'e', 'l', 'l', 'o' };
printf("%s\n", arr4);//除了\n换行,什么都不打印输出
return 0;
}
解释说明:
1 strlen()
是用来计算字符串长度的一个库函数,从起始地址开始向后统计字符数,直到遇到 \0
就立即停止,但不统计 \0
。
需要包含头文件 <string.h>
。
2 转义字符
简单地说,转义字符是难以表示或无法输入的字符。
转义字符(Escape character),所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。C语言中定义了一些字母前加 " \
" 来表示常见的那些不能显示的ASCII字符,如 \0
,\t
, \n
等,称为转义字符。
2.1 示例1
打印一个文件路径
#include<stdio.h>
int main()
{
//打印一个文件路径
printf("c:\code\test.c\n"); //c:code est.c
printf("c:\\code\\test.c\n");//c:\code\test.c
return 0;
}
解释说明:
1 第一个 printf
函数格式化字符串中的 \c
、\t
被识别为转义字符。
在字符串中,\
会与后一个字符形成转义字符。
如果想要输出 \
,就必须写成 \\
的形式。
2.2 转义字符表
转义字符 | 释义 |
---|---|
\? | 表示一个问号;在书写连续多个问号时使用,防止它们被解析成三字母词 “ ??) -> ] ” |
\’ | 表示一个单引号 |
\" | 表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,会触发蜂鸣,但是不会移动屏幕光标 |
\b | 退格符 |
\f | 换页符,把屏幕光标移至下一页的开始处 |
\n | 换行符,把屏幕光标移至下一行的开始处 |
\r | 回车,把屏幕光标移动到当前行的开始处 |
\t | 水平制表符,把屏幕光标移至下一个水平制表点 |
\v | 垂直制表符,把屏幕光标移至下一个垂直 制表点 |
\ddd | ddd 表示1~3个八进制数字。比如:\130 表示字符 X |
\xdd | dd 表示2个十六进制数字。比如:\x30 表示字符 0 |
2.3 示例2
打印单引号、双引号
#include<stdio.h>
int main()
{
//使用printf函数打印单引号、双引号
printf("\'\n");
printf("%c\n", '\'');
printf("%s\n", "'");
printf("\"\n");
printf("%c\n", '"');
printf("%s\n", "\"");
return 0;
}
解释说明:
1 printf("\'\n");
、 printf("\"\n");
在格式化字符串中使用转义字符,就可以打印单引号和双引号。
2 printf("%c\n", '\'');
单引号作为字符打印,需要转变为转义字符。
3 printf("%s\n", "\"");
双引号作为字符串打印,需要转变为转义字符。
2.4 示例3
下面程序输出什么?
#include<stdio.h>
int main()
{
//下面程序输出什么
printf("%d\n", strlen("abcdef"));//6
//a b c d e f
printf("%d\n", strlen("c:\test\628\test.c"));//14
//c : \t e s t \62 8 \t e s t . c
return 0;
}
解释说明:
1 \628
:因为八进制中没有数字8,所以 \62
是一个字符,8
是一个字符。
2 八进制 \62
转换成十进制:6*8^1 + 2*8^0 = 48 + 2 = 50 。
总结:
本节介绍了什么是字符串和字符串结束标志 \0
;最后给出了转移字符表,以及转义字符的一般用法。
感谢您的阅读!如有任何错误,欢迎您的批评指正!