c语言中的字符串+转义字符+注释

简介: c语言中的字符串+转义字符+注释

一.字符串

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字 符串,例如“hello.\n”

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

字符串的打印输出

由于在c语言中是没有字符串这种数据类型的,所以我们可以用指针类型或者数组类型来对字符串进行存储输出,下面来看一段代码:


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
/*输出一个字符串,因为c语言中是没有字符串类型的,所以可以用指针类型或者数组类型对字符
串进行输出*/
int main(){//int main是c99标准
  char* p = "abcde";/*char*为指针类型,p为指针
            abcde为字符串,C语言中是没有
            特定的字符串类型的*/
  printf("%s\n", p);/*打印这个字符串,若要打印字符串
            则参数为%s,输出结果为abcde*/
  char str[] = { "bit" };//用双引号括起来表示字符串,其中默认是有一个结束标志\0
  char str2[] = { 'b','i','t' };
  char str3[] = { 'b', 'i', 't' ,'\0'};
  char str4[7] = { 'b', 'i', 't' ,'t'};/*此时如果给定了数组的大小,以此数组为
                     例,它是有七个格子,前四个放入了bitt,
                     则后面三个此时默认放的都是\0*/
  printf("%s\n", str);/*输出结果为bit,原因是字符串的结束标志为\0
             的转义字符但是平时是不会写出来的,是系统默认的,
             所以当字符串“bit”存到char类型的数组时会自动
             在末尾存入\0*/
  printf("%s\n", str2);/*输出结果为bit烫烫烫烫蘠it,原因是此时的'b','i','t'
             已经不再是字符串了,则不再默认有\0符号,所以
             在输出字符串的时候会bit后面的是随机输出的,即找到
             \0结束标志才会结束*/
  printf("%s\n", str3);/*输出结果为bit,此时有结束标志\0,*/
  printf("%s\n", str4);/*输出结果为bitt*/
  return 0;
}


如图我们可以看到我们分别用指针类型和数组类型对字符串进行了存储。


对于指针存储的字符串的输出结果如下:


2.png


对于数组存储的字符串的输出结果如下:

2.png


在这里可能大家对此输出结果可能会有疑问,我们来对每句输出语句进行解释:

char str[] = { "bit" };
printf("%s\n", str);

在这里我们可以看到此数组的输出结果为bit,原因是首先用双引号括起来表示字符串,其中默认是有一个结束标志\0,字符串的结束标志为\0的转义字符平时是不会写出来的,是系统默认的,所以当字符串“bit”存到char类型的数组时会自动在末尾存入\0。


char str2[] = { 'b','i','t' };
printf("%s\n", str2);

在这里我们可以看到此数组的输出结果为bit烫烫烫烫烫烫烫烫烫烫烫烫烫烫蘠it,原因是此时的'b','i','t'已经不再是字符串了,则不再默认有\0符号,所以 在输出字符串的时候bit后面的是随机输出的,即找到\0结束标志才会结束。


char str3[] = { 'b', 'i', 't' ,'\0'};
printf("%s\n", str3);

在这里我们可以看到此数组的输出结果为bit,原因是虽然此处'b','i','t'已经不再是字符串了,但是多了一个结束标志\0,在输出字符串时找到结束标志\0时便会结束,则输出结果为bit


char str4[7] = { 'b', 'i', 't' ,'t'};
printf("%s\n", str4);

在这里我们可以看到此数组的输出结果为bitt,原因是虽然'b','i','t''t'已经不再是字符串了,但是此处我们可以看到确定了数组的大小为7,那么数组的前四个格子放满后还空了三个格子,此时我们经过调试发现为三个\0结束符,调试的结果如下:


2.png



字符串的长度

我们在求字符串长度时一般会用到strlen()方法 ,同时也会有sizeof()方法与之作为类比,下面我们来对两种方法通过代码的形式来进行一个对比,首先来看一段代码:


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>//strlen库函数包含在<string.h>的头文件当中
//计算字符串的长度
int main(){
  char* p = "abc";
  int a = strlen(p);/*strlen库函数为求字符串的长度,但不包含\0结束符,即遇见\0结束符便会停止,所以字符串“abc”其长度为3*/
  printf("字符串abc长度为%d\n", a);//输出a的值为3
  int c = sizeof(p);
  printf("字符串abc长度为%d\n", c);//输出c的值为4,sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,64位操作系统对应8字节
  char* d = "abc\0des";
  int b = strlen(d);
  printf("字符串abc\\0des长度为%d\n", b);/*字符串abc\0des的长度为3原因是strlen函数再求字符串长度的时候遇到\0会停止,
                   所以上述字符串在遇到\0时停止后长度只求到了字母c,故长度为3*/
  int l = sizeof(d);
  printf("字符串abc\\0des长度为%d\n", l);//sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,64位操作系统对应8字节,所以此结果为4
  char str2[] = "asdfgh";//
  int e = strlen(str2);
  printf("字符串asdfgh长度为%d\n", e);//输出e的值为6
  int f = sizeof(str2);
  printf("字符串asdfgh长度为%d\n", f);//输出f的值为7,因为sizeof获得该数组所占内存空间大小,包括字符串结尾的'\0',所以结果为7
  char str3[8] = {  'a', 's', 'd' };
  int g = strlen(str3);
  printf("其长度为%d\n", g);//输出g的值为3
  int h = sizeof(str3);
  printf("其长度为%d\n", h);//输出h的值为8,因为sizeof获得该数组所占内存空间大小,但是大小确定为8,故sizeof得到的结果是8
  char str4[] = "as\0df";
  int i= strlen(str4);
  printf("字符串as\0df长度为%d\n", i);//输出i的值为2,因为strlen函数在求字符串长度时遇见\0结束符便会停止
  int o = sizeof(str4);
  printf("字符串as\0df长度为%d\n", o);//输出o的值为6,因为sizeof获得该数组所占内存空间大小,包括字符串结尾的'\0',所以结果为6
  printf("%d\n", strlen("c:\test\328\test.c")); /*\ddd为格式ddd表示1~3个八进制的数字,所以\328中末位数为8是不能被进行转义的,
                          原因是八进制数字最高只能取到7,所以\32被解析成一个转义字符,故8不能被转义,所以其长度为14*/
  return 0;
}


下面来对每个模块代码进行分析:

char* p = "abc";
  int a = strlen(p);/*strlen库函数为求字符串的长度,但不包含\0结束符,即遇见\0结束符便会停止,所以字符串“abc”其长度为3*/
  printf("字符串abc长度为%d\n", a);//输出a的值为3
  int c = sizeof(p);
  printf("字符串abc长度为%d\n", c);//输出c的值为4,sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,64位操作系统对应8字节

根据上述代码,此时我们用指针类型来存储字符串,首先用strlen方法对其长度进行输出,因为strlen方法在计算长度时是不包含结束符\0,所以遇见\0时便会停止,则其长度为3,而当我们用sizeof方法针对指针类型时,此时最后的输出结果都为4,原因是若在32位操作系统中,首先指针变量存放的是地址, 而地址在内存中都是十六进制的数字,为int类型,所以是四个字节,但是若在64位操作系统中,此时指针变量的大小为八个字节


输出结果为:


在32位操作系统中


2.png


在64位操作系统中

2.png

char* d = "abc\0des";
  int b = strlen(d);
  printf("字符串abc\\0des长度为%d\n", b);/*字符串abc\0des的长度为3原因是strlen函数再求字符串长度的时候遇到\0会停止,
                   所以上述字符串在遇到\0时停止后长度只求到了字母c,故长度为3*/
  int l = sizeof(d);
  printf("字符串abc\\0des长度为%d\n", l);//sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,64位操作系统对应8字节,所以此结果为4

 根据上述代码,此时我们用指针类型来存储字符串,首先用strlen方法对其长度进行输出,因为strlen方法在计算长度时是不包含结束符\0,所以遇见\0时便会停止,则其长度为3,而当我们用sizeof方法针对指针类型时,此时最后的输出结果都为4,原因是若在32位操作系统中,首先指针变量存放的是地址, 而地址在内存中都是十六进制的数字,为int类型,所以是四个字节,但是若在64位操作系统中,此时指针变量的大小为八个字节


输出结果为:


在32位操作系统中


2.png


在64位操作系统中


2.png


char str2[] = "asdfgh";//
  int e = strlen(str2);
  printf("字符串asdfgh长度为%d\n", e);//输出e的值为6
  int f = sizeof(str2);
  printf("字符串asdfgh长度为%d\n", f);//输出f的值为7,因为sizeof获得该数组所占内存空间大小,包括字符串结尾的'\0',所以结果为7

 根据上述代码,此时我们用数组类型来存储字符串,首先用strlen方法对其长度进行输出,因为strlen方法在计算长度时是不包含结束符\0,所以遇见\0时便会停止,则其长度为6,而当我们用sizeof方法针对数组类型时,此时sizeof获得是该数组所占的内存空间大小,包括字符串结尾的'\0',一共有七个字符,每个字符占一个字节,所以结果为7.


输出结果为:

2.png


char str3[8] = {  'a', 's', 'd' };
  int g = strlen(str3);
  printf("其长度为%d\n", g);//输出g的值为3
  int h = sizeof(str3);
  printf("其长度为%d\n", h);//输出h的值为8,因为sizeof获得该数组所占内存空间大小,但是大小确定为8,故sizeof得到的结果是8

根据上述代码,此时我们用数组类型来存储字符串,首先用strlen方法对其长度进行输出,因为strlen方法在计算长度时是不包含结束符\0,所以遇见\0时便会停止,而数组的前三个格子占满后,后五个全部为\0,则其长度为3.


而当我们用sizeof方法针对数组类型时,此时sizeof获得是该数组所占的内存空间大小,此数组中一共有八个字符,而一个字符占1个字节,所以一共是八个字节.


输出结果为:


2.png

  char str4[] = "as\0df";
  int i= strlen(str4);
  printf("字符串as\0df长度为%d\n", i);//输出i的值为2,因为strlen函数在求字符串长度时遇见\0结束符便会停止
  int o = sizeof(str4);
  printf("字符串as\0df长度为%d\n", o);//输出o的值为6,因为sizeof获得该数组所占内存空间大小,包括字符串结尾的'\0',所以结果为6

根据上述代码,此时我们用数组类型来存储字符串,首先用strlen方法对其长度进行输出,因为strlen方法在计算长度时是不包含结束符\0,所以遇见\0时便会停止,则其长度为2.


而当我们用sizeof方法针对数组类型时,此时sizeof获得是该数组所占的内存空间大小,包括字符串结尾的'\0',而char为1个字节,一共有6个字符,则字节大小为6.


其输出结果为:

2.png


二.转义字符

转义字符顾名思义就是转变意思:下面来看一些转义字符


2.png


以上就是一些常见的转义字符,下面我们来看一段代码:


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>//strlen库函数包含在<string.h>的头文件当中
//转义字符的使用
int main(){
  //问题一:如何在屏幕打印输出“helloworld”
  printf("%s\n", "\"helloworld\"");//输出结果为“helloworld”
  //问题二:如何在屏幕打印输出单引号 '
  //问题三:如何在屏幕打印输出双引号''
  printf("%s\n", "\'");
  printf("%s\n", "\"");
  return 0;
}

当我们想输出某个符号时,就在它的前面加上\即可,例如图中的三个问题,大家可以进行参考,附上面程序的运行结果。

2.png



三.注释

在c语言中有行注释与块注释两种


行注释:用//xxxx来表示


块注释:用/*xxxxx*/来表示


注意:在块注释中可以嵌套行注释,但不能嵌套块注释


快捷键:1.ctrl+k+c  注释


             2.ctrl+k+u  取消注释


相关文章
|
23天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
47 10
|
27天前
|
存储 算法 C语言
C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项
本文深入探讨了C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项,并通过案例分析展示了实际应用,旨在帮助读者提高编程效率和代码质量。
80 4
|
2月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
3月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
113 8
|
3月前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
230 7
|
3月前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
706 6
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
141 4
|
23天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
43 9
|
23天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
33 8