【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

相关文章
|
1月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
2月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
2月前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
140 7
|
2月前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
555 6
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
3月前
|
C语言
【C语言】字符串及其函数速览
【C语言】字符串及其函数速览
31 4
|
3月前
|
存储 数据可视化 C语言
【C语言】C语言-身份证管理系统(源码+注释)【独一无二】
【C语言】C语言-身份证管理系统(源码+注释)【独一无二】
|
3月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
63 0
|
3月前
|
存储 安全 编译器
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
当然可以用scanf和printf输入输出,这里在之前【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)已经讲过了,这里就不再赘述,主要介绍只针对字符的函数.
55 0