首页 > 系统相关 >C进阶-字符串与内存函数介绍(另加2道典型面试题)

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

时间:2024-12-31 22:29:02浏览次数:3  
标签:面试题 进阶 指向 打印 另加 cpp printf 字符串 cp

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

我们先看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)直接使用:

 

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

标签:面试题,进阶,指向,打印,另加,cpp,printf,字符串,cp
From: https://blog.csdn.net/Dovis5884/article/details/144836582

相关文章

  • Flutter进阶组件(7):DataTable(数据表格)
    DataTable是一个用于展示数据的表格组件,它允许开发者以一种结构化和可滚动的方式展示数据集。DataTable非常适合展示详细信息,如表格数据、统计数据或配置选项。一、创建基本的DataTable以下是创建一个基本DataTable的示例:import'package:flutter/material.dart';voidmain()......
  • Java Map 集合详解:基础用法、常见实现类与高频面试题解析
    在Java集合框架中,Map是用于存储键值对(Key-Value)的重要接口,广泛应用于开发中的各种场景。本文将详细讲解Map的基础概念、常见实现类及其特性,并结合代码示例和高频面试问题,帮助你深入理解Map的用法。......
  • Vue 3 + TypeScript 从入门到进阶:快速上手指南
    Vue3+TypeScript从入门到进阶:快速上手指南Vue3是Vue.js的最新版本,而TypeScript是一种可以极大提升开发效率和代码质量的强类型语言。当Vue3与TypeScript结合使用时,可以带来更高效的开发体验。本文将重点介绍Vue3与TypeScript的结合使用方式,并提供详细的代码......
  • Vue 3 从入门到进阶:快速上手指南
    Vue3从入门到进阶:快速上手指南Vue3是Vue.js的最新版本,引入了许多强大的新特性,如CompositionAPI、全新的响应式系统等,为开发者提供了更高的灵活性和性能优化。本文将带你快速了解Vue3的核心概念,并提供代码示例帮助你上手。一、Vue3新特性概览1.CompositionAPIC......
  • Java List 集合详解:基础用法、常见实现类与高频面试题解析
    正文在Java集合框架中,List是一个非常重要的接口,广泛用于存储有序的元素集合。本文将带你深入了解List接口的基本用法、常见实现类及其扩展,同时通过实际代码示例帮助你快速掌握这些知识。......
  • 《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
    @目录二、高级篇(大厂进阶)1.Docker复杂安装详说1.1安装mysql主从复制1.2安装redis集群1.2.1面试题:1~2亿条数据需要缓存,请问如何设计这个存储案例哈希取余分区一致性哈希算法分区哈希槽分区1.2.23主3从redis集群扩缩容配置案例架构说明整体流程图知识点总结图使用步骤:注意点说明......
  • 《智破光影迷宫:人工智能图像识别的进阶挑战》
    在当今数字化的时代,人工智能图像识别技术如同一颗璀璨的明星,照亮了众多领域前行的道路。从安防监控中的人脸辨识、医疗影像的病症诊断,到智能交通里的车牌读取以及工业生产线上的产品质量检测,图像识别的应用场景可谓广泛且关键。然而,如同阳光之下必有阴影,复杂背景与光照变化......
  • SQL 实战:窗口函数进阶 – 实现复杂滑动窗口与动态累计计算
    窗口函数是SQL中非常强大的工具,能够在不改变原始数据粒度的情况下,动态进行排名、累计、滑动平均以及环比同比计算。在实际业务场景中,窗口函数常用于构建复杂的时间序列分析,如滚动累计、移动平均、同比/环比增长等。本文将深入探讨窗口函数的高级用法,通过具体案例展示如......
  • Python 进阶:深入理解 import 机制与 importlib 的妙用
    大家好,今天我们来深入探讨Python中的导入机制和importlib模块。相信不少朋友和我一样,平时写代码时可能只用过最基础的import语句,或者偶尔用importlib.import_module来做些动态导入。但其实这背后的机制非常有趣,而且importlib提供的功能远比我们想象的要丰富。Python的......
  • Python常见面试题50道
    好的,以下是50个常见的Python面试题,涵盖了各个方面:基础知识(BasicKnowledge)Python的主要特点是什么?解释Python中的列表(list)和元组(tuple)的区别。Python中的字典(dictionary)是如何工作的?解释Python中的__init__方法的作用。Python中的self关键字是什么意思?......