【C语言】字符串+注释

简介: 本文简单的介绍了C语言的字符串的基本概念及和注释,可以为小白打下坚实的C语言基础,加油,成为更好的自己。

王国探险记系列

文章目录(3)


前言

一,什么是字符串呢?

1,那C语言是怎么表示字符串的呢?

"hello world.\n"

2,证明字符串的结束标志是一个 \0 的转义字符

3,证明字符串的结束标志\0 的重要性

3.1我们在arr2的字符串数组后面加一个\0然后看结果

四,我们还可以通过计算字符串长度来证明字符串后面有一个隐藏的\0

提前知道:

五,注释

总结


前言

C语言王国探险记,是我们学习C语言,从小白成长为大佬的的探险历程,我们在这章将探险字符串和注释这个知识关卡


一,有字符串类型吗?

c语言中字符类型,但是有字符串类型吗?

char

short

int

long

long long

folat

double

我们在怎么类型里面有没有见到一个叫字符串类型的呢?没有

C语言有字符类型,但是没有字符串类型。

1,那C语言是怎么表示字符串的呢?

"hello world.\n"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符 串。

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。

2,证明字符串的结束标志是一个 \0 的转义字符

简单写一个代码让大家跟着我们看一下

我们主函数写出来就什么都不写

我们将在代码加注释和结果运行图中进行知识点的讲解:

//如何证明\0是字符串的结束标志呢
int main()
{
  return 0;
}
//调试技巧:先按F10,开始调试之后,出现箭头开始调试了
//在菜单栏里点调试,然后是监视窗口的,分为1,2,3,4
//点那个监视窗口都可以
//这里给上一个双引号然后加上abcdef。好像平平无奇
//然后我们点开可以看到abcdefg后面跟了一个\0
//实际上当你看到这个字符串的时候可以看到字符串有个\0吗,看不到
//只有当你真正的去观察会发现,g后面还放了一个\0的字符
//其实在字符串的末尾是隐藏了一个\0的字符的,当你写出这样一个字符串的时候悄悄的隐藏了一个\0
//这个\0叫做字符串的结束标准
//一个字符串当真正往后走,遇到\0的时候,它才认为这个字符串结束了
//\0是字符串的结束标志

image.gif

注意:

我们的main()函数里面是没有任何的值的,我们的第三张图里面的“abcdef"字符串是我们在监控窗口里面添加的

看图:我们可以看到一套流程后,我们可以看到,在字符串的最后有一个隐藏的\0。

image.gif编辑

image.gif编辑

image.gif编辑

3,证明字符串的结束标志\0 的重要性

我们现在再举一个有打印字符数组来证明\0对字符串有很重要的意义的代码实例:

//字符串是可以存放在字符数组中的
//%s是打印字符串
int main()
{
  char arr1[] = "abc";
  //我们这个地方看到的是这样一个现象,隐藏了一个\0
  char arr2[] = { 'a' , 'b' , 'c'};//我们说C语言里面两个单引号引起来的是一个字符,
    //中间是一个逗号
  //我们可以看到后面没有\0
  //现在开始打印字符串
  //pfintf()怎么来打印字符串呢很简单
  //一个"%s"就可以打印
  printf("%s\n", arr1);//就是把arr1这个里面的字符串数组打印出来,打印完换个行
  printf("%s\n", arr2);//就是把arr2这个里面的字符串数组打印出来,打印完换个行
  //这就是我们现在的打印两个字符串
  //看一下我们的效果
  return 0;
}
//调试调监控,发现确实后面隐藏了\0
//证明了字符串里面放了一个隐藏的\0
//这个\0是字符串的结束标志,她对于字符串来说非常重要

image.gif

我们通过代码+注释和结果运行图来理解:

image.gif编辑

image.gif编辑

结果分析:

我们可以看到arr1有\0作为结束标志,arr2数组是没有\0作为结束标志,我们在通过运行结果图可以看到

arr1打印完abc就停下来了

arr2打印完abc就是烫烫烫烫.....

在里面最大的问题就在于\0,我们前面说了\0是字符串的结束标志

我们还可以通过字符数组在内存中的表示形式来理解\0的重要性:

arr1的内存布局

a b c \0

因为有\0所以就只打印到c就停止了,就证明了\0的重要性

arr2的内存布局

a b c  

后面是啥不知道,我只知道我在数组里面放了abc,后面是不是\0不知道所以当%s打印arr2的时候,字符串打印一定是遇到\0停止,当c打印完之后要不要打印呢,取决于后面有没有\0,我们这个结果可见没有遇到\0,直达在某一个一个地方遇到\0了,恰好又是他随机碰上的一个\0才停止打印。这就证明了\0的重要性

3.1我们在arr2的字符串数组后面加一个\0然后看结果

我们通过代码+注释和结果运行图来理解:

int main()
{
  char arr1[] = "abc";
  //我们这个地方看到的是这样一个现象,隐藏了一个\0
  char arr2[] = { 'a' , 'b' , 'c' ,'\0'};
  //如果这里主动放一个\0呢,我们打印看一下
  // 这个时候就是两个abc了
  //我们说C语言里面两个单引号引起来的是一个字符,中间是一个逗号
  //我们可以看到后面没有\0
  //现在开始打印字符串
  //pfintf()怎么来打印字符串呢很简单
  //一个"%s"就可以打印
  printf("%s\n", arr1);//就是把arr1这个里面的字符串数组打印出来,打印完换个行
  printf("%s\n", arr2);//就是把arr2这个里面的字符串数组打印出来,打印完换个行
  //这就是我们现在的打印两个字符串
  //看一下我们的效果
  return 0;
}

image.gif

image.gif编辑

我们可以看到运行结果图,在arr2后加一个\0就可以被编译器正常的识别结束

再一次证明了\0的重要性

四,我们还可以通过计算字符串长度来证明字符串后面有一个隐藏的\0

提前知道:

我们计算字符串长度用到一个函数叫strlen()
str就是字符串的意思,len就是计算的意思
strlen()是一个库函数 -- 求字符串长度的,统计的是字符串中\0之前的字符个数
#include <string.h>//是strlen()这个函数所需要的头文件,string就是字符串的意思,
注意你使用字符串系列的的函数都需要引用这个头文件

我们通过代码+注释和结果运行图来理解:

//我们计算字符串长度用到一个函数叫strlen()
//str就是字符串的意思,len就是计算的意思
//strlen()是一个库函数 -- 求字符串长度的,统计的是字符串中\0之前的字符个数
//#include <string.h>//是strlen()这个函数所需要的头文件,string就是字符串的意思,
//注意你使用字符串系列的的函数都需要引用这个头文件
int main()
{
  char arr1[] = "abc";//我们统计arr1的时候我们统计到c就停止了,
  //因为遇到了\0,所以统计出来是3
  char arr2[] = { 'a','b','c' };
  printf("%d\n",strlen(arr1));//长度肯定是整数嘛,我们用%d来打印
  //strlen在数arr1的时候应该是3
  printf("%d\n", strlen(arr2));//求长度的时候也是遇到\0才停止,所以是一个随机的值
  //在计算字符串长度的时候\0是结束标志,不算作字符串内容。是统计个数的时候不统计在内的
  //但是对于arr2来说统计玩c,后面还要统计多少个字符才能遇到\0都是未可知的
  //所以strlen统计的arr2是多少是不知道的,就可能是一个随机值
  return 0;
}

image.gif

image.gif编辑

解释:

arr1和arr2的区别呢?
他们里面就差一个\0
像arr2这种没有\0的字符串是不能使用%s来打印的
但是你想要使用%c一个一个字符的去打印也是没有问题的
上面这些就是为了告诉我们字符串是上面,已经字符串中的\0是干什么的,
她是作为字符串的结束标志而存在的
这个结束标志是在统计长度的时候,和打印的时候遇到\0就停止了

五,注释

1,代码中不需要的代码可以直接删除,也可以注释掉
我们就会将写注释方便我们去理解,当我们遇到不想删除的代码我们就可以注释掉,
让其不在发挥作用
2.代码中有一些代码比较难懂,可以加一下注释文字
我们在上面写的代码当中,为了让我们更好的去理解代码,
写注释就是一个解释这个东西到底是啥,有啥用,帮助我们理解代码,帮助别人阅读代码的

int main()
{ 
  /*这种注释方式是C语言自带的,可以一次注释多行,
  但是这种注释方式是不能嵌套注释的,如果它里面已经有了/**/就会不能完全注释掉*/
  //这是c++的注释方式
  int a = 10;//创建一个整型变量,并赋值为10
  return 0;
}

image.gif

c语言风格的注释/*xxxxxxx*/

       缺陷:不能嵌套注释
c++语言风格的注释//xxxxxxxx
       可以注释一行也可以注释多行,能嵌套注释


总结

以上就是今天要讲的内容,本文仅仅简单介绍了字符串的基本概念及和注释,可以让你在c语言王国的探险更加有趣,充实。

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