!!!教你如何搞懂字符串函数(详细,后期会讲函数栈帧)(上)

简介: !!!教你如何搞懂字符串函数(详细,后期会讲函数栈帧)
  • 求字符串长度
  • strlen
  • 长度不受限制的字符串函数
  • strcpy
  • strcat
  • trcmp
  • 长度受限制的字符串函数介绍
  • strncpy
  • strncat
  • strncmp
  • 字符串查找
  • strstr
  • strtok
  • 错误信息报告
  • strerror
  • 不幸的gets函数和升级版的fgets函数
  • puts函数和fputs函数
  • 缓冲区
  • 结束键盘,文件,流输入

首先我们先来学习一下strlen函数

  • strlen
  • 1.字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。
  • 2.参数指向的字符串必须要以 '\0' 结束。所以如果我们没有遇到\0,strlen会一直检索直到遇到\0
  • 上述我们看到计算的值为60,是因为我们strlen函数在计算arr数组时没有遇到\0,所以产生了随机值60,那么我们看下内存是否存放了\0
  • 3.注意函数的返回值为size_t,是无符号的( 易错
  • 我们看看上述答案是多少呢,是第一个选择还是第二个选择呢?

     答案是第二个选项

  • 4.学会strlen函数的模拟实现(下图是模拟实现思路)

strcpy

1.源字符串必须以 '\0' 结束。

想一想为什么出现这种现象(非法访问?)

答案是因为这个函数的实现就必须是用'\0'结束,这里arr2的空间里不  知  道'\0'在哪,所以在拷贝的时候会出现bug,具体我们看下面的模拟 实现内容就明白了。

2.会将源字符串中的 '\0' 拷贝到目标空间。

 我们看看是否strcpy函数会把'\0'拷贝到目标空间???

 

相关文章
|
存储 安全
!!!教你如何搞懂字符串函数(详细,后期会讲函数栈帧)(下)
!!!教你如何搞懂字符串函数(详细,后期会讲函数栈帧)(上)
|
编译器
!!!教你如何搞懂字符串函数(详细,后期会讲函数栈帧)(中)
!!!教你如何搞懂字符串函数(详细,后期会讲函数栈帧)(上)
|
编译器 C语言
C语言进阶教程(再论指针和数组(2))
C语言进阶教程(再论指针和数组(2))
67 2
|
存储 安全 编译器
初始C语言(7)——详细讲解有关初阶指针的内容
初始C语言(7)——详细讲解有关初阶指针的内容
100 0
|
存储 编译器 程序员
|
存储 算法 编译器
【c语言技能树】函数的创建与销毁 --函数栈帧
以下内容可能乍一看有点费解,但在我讲的过程中再看就很容易理解啦,
263 0
|
存储 监控 编译器
【C语言进阶】函数栈帧的创建和销毁(内功修炼)
目录 前言 一、基础知识 1.1 什么是栈区? 1.2 寄存器 1.3 测试代码和一些其它的 二、函数栈帧的创建和销毁的过程 2.1 _tmainCRTStartup函数(调用main函数)栈帧的创建 2.2 main函数栈帧的创建 2.3 main函数内执行有效代码 2.4 Add函数栈帧的创建 2.5 Add函数内执行有效代码 2.6 Add函数栈帧的销毁 2.7 main函数代码继续执行 三、所需反汇编代码总览 四、总结
332 0
【C语言进阶】函数栈帧的创建和销毁(内功修炼)
抽丝剥茧C语言(中阶)函数栈帧的创建与销毁——图解(下)
抽丝剥茧C语言(中阶)函数栈帧的创建与销毁——图解
|
编译器 C语言
抽丝剥茧C语言(中阶)函数栈帧的创建与销毁——图解(上)
抽丝剥茧C语言(中阶)函数栈帧的创建与销毁——图解
|
存储 编译器 C语言
C语言番外-------《函数栈帧的创建和销毁》知识点+基本练习题+完整的思维导图+深入细节+通俗易懂建议收藏(一)
C语言番外-------《函数栈帧的创建和销毁》知识点+基本练习题+完整的思维导图+深入细节+通俗易懂建议收藏(一)