当前位置: 首页 > news >正文

C进阶-字符串与内存函数介绍(另加2道典型面试题)

满意的话,记得一键三连哦!

我们先看2道面试题

第一道:

我们画图理解:

 pa++先使用再++,pa开始指向a【0】++之后pa向下移动一位,再解引用,指向a【1】a【1】又指向at的首元素a的地址,开始打印字符串at

第二道:

我们画个图:(初始的指向图)

第一个printf:(配着图哦!)(注意上一个printf的图是下一个printf的初始图,因为cpp指向也发生了改变)

 cpp加加,首先自己的指向向下移动一位,指向cp【1】,解引用得到cp【1】的位置,再解引用得到c【2】,打印POINT

第二个printf:

 cpp先加加后使用,让cpp指向了cp【2】,解引用拿到cp【2】,cp【2】先自减再使用,解引用得到c【0】,     c【0】+3      ,         c【0】从指向E(首元素)向后移动3位,指向了后面那个E,打印EP

注意上个printf的图是下一个printf的初始图,同时注意cpp【-2】这种,cpp在使用完后会复原

第三个printf:

 cpp【-2】,相当于cpp-2,指向cp【0】,自解引用得到cp【0】,cp【0】再解引用,拿到c【3】,c【3】开始指向F(首元素),+3向后移动3位,指向了S,打印ST

第四个printf:

cpp[【-1】【-1】,先向下移动一位自解引用得到cp【1】,再让cp【1】向下移动一位自解引用拿到c【1】,c【1】开始指向N(首元素),再向后移动一位指向E,打印EW

C— 字符串与内存函数的介绍(注意头文件哦!)

我们先看几个常用的库函数(注意目标空间足够哦!这是常犯错的地方

strlen计算长度

strlen是求字符串长度,直到遇到 \0 才会停下来,计算的是 \0 之前的字符个数,返回值是size_t(无符号整数)

(1)直接使用(注意:只有字符串才有 \0 ,strlen只会遇到 \0 才会停下)

(2)指针实现strlen

 

(3)递归实现strlen

 

strcpy拷贝字符串 

就是给一个目标空间,把一个字符串拷贝到这个空间

(1)直接使用

 注意:它有一个覆盖的效果

(2)实现strcpy

 

strcat追加字符串

找到目标的末尾\0,在\0之后追加字符串(因此追加之后,原来目标末尾的\0会被丢掉,因为要打印新的字符串,不然可能断节)

(1)直接实现

(2)实现strcat

 

strcmp比较字符串大小

比较2个字符串大小,从第一个开始,一个个比较(比较ASCII值),比较的结果返回一个“>0”,"<0","=0”的数字

(1)直接使用strcmp

(2)实现strcmp(简单的方法就是多写几个判断就行了)

 

strnlen与strncpy与strncat与strncmp

这几个就是上面的升级版,升级地方就在可以控制个数,我举个例子大家就明白了,举一反三的道理

同样,如果是strncat,就是控制追加字符个数

如果是strncmp,就是控制比较个数

用法一样,这个很好理解,都是在前两个参数后面加一个数字

我们来看看strncpy(拷贝字符串)如果数字超标了怎么办:

所以:如果是strncpy,那么数字过大,就只打印拷贝的全部内容

 

我们再看看strncmp:(比较大小)

结果会直接报错 

下面看strncat(追加字符串):

 结果是编译器不报错,直接输出追加完的结果

strstr查找字符或者字符串


跟名字一样,就是查找功能,然后从查找的符合条件的地方一起打印,直到\0停下

(1)直接使用:

今天就先到这里啊!明天我再补充完整,感谢支持!!!!


http://www.mrgr.cn/news/82127.html

相关文章:

  • STM32CUBEIDE FreeRTOS操作教程(十二):std dynamic memory 标准动态内存
  • OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218
  • 计算机网络 (22)网际协议IP
  • 【每日学点鸿蒙知识】字体大小,镜像语言间距、禁止分屏、Router与Navigation
  • 金融租赁系统的创新与发展推动行业效率提升
  • Java学习教程,从入门到精通,Java 自动装箱和拆箱语法知识点及案例代码(78)
  • Oracle 11g 中 MODEL语法使用 详解
  • 2024年度学习总结
  • Linux 内核调试
  • 30天开发操作系统 第 10 天 -- 叠加处理
  • GRAPE——RLHF微调VLA模型:通过偏好对齐提升机器人策略的泛化能力(含24年具身模型汇总)
  • win32汇编环境下,提取对话框程序中,listview列表控件里的内容示例
  • 设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析
  • 点跟踪基准最早的论文学习解读:TAP-Vid: A Benchmark for Tracking Any Point in a Video—前置基础
  • win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序
  • 溢出概念总结
  • 基于深度学习的视觉检测小项目(二) 环境和框架搭建
  • MIT Cheetah 四足机器人的动力学及算法 (I) —— 简化动力学模型
  • GeekPad 连接到VirtualBox的Ubuntu虚拟机上的Home-Assistant
  • win32汇编环境下,窗口程序中生成listview列表控件及显示
  • 使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋
  • UE5 Debug的一些心得
  • 商汤C++开发面试题及参考答案
  • Enum枚举类与静态变量和静态数组的区别
  • 单片机-LED实验
  • Edge如何获得纯净的启动界面