【C语言】第三回 关于字符串,语句和注释的使用1

简介: 【C语言】第三回 关于字符串,语句和注释的使用

一、字符串、\0 和 转义字符

1. 字符

使⽤双引号括起来的⼀串字符就被称为字符串,如:“abcdef”,就是⼀个字符串。

字符串的打印格式可以使⽤ %s 来指定,也可以直接打印如下:

#include <stdio.h>
int main()
{
  printf("%s\n", "hello C");
  printf("hello c");
  return 0;
}

1.2. \0

C语⾔字符串里⼀个小知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,而这个\0字符是字符串的结束标志。

对于字符串"abcdef",我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个 \0 的转义字符, \0 是字符串的结束标志。所以我们在使⽤库函数 printf() 打印字符串或者strlen() 计算字符串⻓度的时候,遇到 \0 的时候就⾃动停⽌了。


当然,我们可以来验证一下,C语⾔中也可以把⼀个字符串放在⼀个字符数组中,我们在这⾥利⽤下⾯的代码验证⼀下 \0 的功能。

#include <stdio.h>
int main()
{
  char arr1[] = {'a', 'b', 'c'};//arr1数组中存放3个字符
  char arr2[] = "abc"; //arr2数组中存放字符串
  printf("%s\n", arr1);
  printf("%s\n", arr2);
  return 0;
}

这样的代码,我调试的时候,观察⼀下 arr1arr2 的内容:

运行结果:

此时,我们可以看到经典 烫烫, arr1 字符数组在打印的时候,打印了 a 、 b 、 c 后还打印了⼀些随机值,这就是因为 arr1 在末尾的地⽅没有 \0` 字符作为结束标志,在打印的时候没有停⽌。


但是 arr2 的打印就是完全正常的,就是因为 arr2 数组是使⽤字符串常量初始化的,数组中有 \0 作为技术标志,打印可以正常停⽌。


!分析后,如果我们在arr1数组中单独放⼀个 ‘\0’ 字符又会怎么样呢?

#include <stdio.h>
int main()
{
  char arr1[] = {'a', 'b', 'c', '\0'};
  char arr2[] = "abc";
  printf("%s\n", arr1);
  printf("%s\n", arr2);
  printf("%s\n", "abc\0def");
  return 0;
}

运行结果:

看到三次打印的结果是⼀样的了,都是打印到 \0 的时候就停⽌了,那从上述的例⼦我们确实能够观察到 \0 的作⽤和重要性的。

1.3 转义字符

当你看到这里,你会或许在前⾯的代码中,你看到 \n , \0 会很纳闷这些都是啥。其实在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。

例如:我们有一个字符 n,当我们在字符串中打印时,它自然会被打印出来。如下:

#include <stdio.h>
int main()
{
  printf("abcndef");
  return 0;
}

输出的结果:

如果我们修改⼀下代码,在 n 的前⾯加上 \ ,变成如下代码:

#include <stdio.h>
int main()
{
  printf("abc\ndef");
  return 0;
}

输出结果:

我们可以看到修改的前后代码输出的结果,截然不同的,那这是为什么呢?

这就是转义字符的问题, \n 是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为 \ 让 n 的意思发⽣了转变, n 本来是⼀个普通的字符,被 \ 转义为换⾏的意思。

C语⾔中像这样的转义字符还有⼀些,具体如下:


• \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。

• \' :⽤于表⽰字符常量’

•\" :⽤于表⽰⼀个字符串内部的双引号

• \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。

• \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。

• \b :退格键,光标回退⼀个字符,但不删除字符。

• \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。

• \n :换⾏符。

• \r :回⻋符,光标移到同⼀⾏的开头。

• \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。

• \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。

【C语言】第三回 关于字符串,语句和注释的使用2:https://developer.aliyun.com/article/1474596

相关文章
|
2天前
|
存储 编译器 C语言
【C语言】字符与字符串---从入门到入土级详解
【C语言】字符与字符串---从入门到入土级详解
19 4
【C语言】字符与字符串---从入门到入土级详解
|
2天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现2
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
2天前
|
C语言 C++
每天一道C语言编程:(去掉:双斜杠注释,去掉空格)
每天一道C语言编程:(去掉:双斜杠注释,去掉空格)
4 0
|
2天前
|
C语言
每天一道C语言编程(4):字符串的逆序输出
每天一道C语言编程(4):字符串的逆序输出
5 0
|
2天前
|
算法 C语言 人工智能
|
2天前
|
C语言
C语言中 字符串和数字的相互转换
C语言中 字符串和数字的相互转换
13 1
|
2天前
|
C语言 C++
C语言利用ASCII码表统计字符串每个字符出现的次数
C语言利用ASCII码表统计字符串每个字符出现的次数
18 0
|
2天前
|
存储 C语言
C语言中字符串的引用与数组元素操作
C语言中字符串的引用与数组元素操作
23 0
|
2天前
|
安全 C语言
指针与字符串:C语言中的深入探索
指针与字符串:C语言中的深入探索
17 0
|
2天前
|
存储 C语言
爱上C语言:scanf、gets以及getchar输入字符串你真的懂了吗
爱上C语言:scanf、gets以及getchar输入字符串你真的懂了吗