实现C语言字符串反转功能的代码解析

       

目录

代码整体展示:

总结:


头文件:

#include <stdio.h> // 提供printf、scanf等输入输出功能
#include <string.h> // 提供strlen函数来计算字符串长度
#include <assert.h> // 提供assert断言功能,用于检测程序运行时的条件int main() {// ...
}

        在本文中,我们将详细解析一段C语言代码,该代码实现了字符串的逆序操作。首先,让我们来逐步分析这段代码:

void function(char* left, char* right) {assert(left); // 1. 检查左指针是否为空assert(right); // 2. 检查右指针是否为空while (left < right) { // 3. 当左指针小于右指针时执行循环char tmp = *left; // 4. 将左指针指向的字符暂存到tmp变量中*left = *right; // 5. 将右指针指向的字符赋值给左指针指向的位置*right = tmp; // 6. 将tmp变量中的字符(原左指针指向的字符)赋值给右指针指向的位置left++; // 7. 左指针向后移动一位right--; // 8. 右指针向前移动一位}
}

        上述函数名为function,接受两个字符指针作为参数,分别指向要进行交换的字符串的首字符和尾字符。通过一个while循环,不断交换左右指针所指向的字符,直到左指针不再小于右指针为止,这样就完成了整个字符串的逆序操作。

        接下来是main函数部分:

int main() {char arr[256] = {0}; // 1. 定义一个长度为256的字符数组并初始化为空字符scanf("%s", &arr); // 2. 从标准输入读取一个字符串到数组arr中,但此处使用scanf可能存在安全问题,因为没有限制输入长度gets(arr); // 3. 此行不应该存在,gets函数已被弃用且不安全,这里应该只保留scanf或更换为fgets以保证安全性int len = strlen(arr); // 4. 计算输入字符串的实际长度// 逆序函数function(arr, arr+len-1); // 5. 调用上面定义的逆序函数对字符串进行逆序操作printf("逆序后>: %s", arr); // 6. 输出逆序后的字符串return 0; // 7. 主函数返回0,表示程序正常结束
}

代码整体展示:

#include <stdio.h>
#include <string.h>
#include <assert.h>void function(char* left, char* right) {assert(left);assert(right);while (left < right) {char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}int main() {char arr[256] = {0};scanf("%s", arr);int len = strlen(arr);function(arr, arr+len-1);printf("逆序后>: %s", arr);return 0;
}

注意: 在实际编程中,为了安全起见,建议使用fgets替代scanf来读取用户输入的字符串,以防止缓冲区溢出。同时,gets函数已被弃用,不推荐在代码中使用。以下是修改后的main函数

int main() {char arr[256] = {0};fgets(arr, sizeof(arr), stdin); // 使用fgets替代scanfarr[strcspn(arr, "\n")] = '\0'; // 移除fgets带来的换行符int len = strlen(arr);function(arr, arr+len-1);printf("逆序后>: %s", arr);return 0;
}

总结:

  • 在这个C语言程序中,我们首先定义了一个用于字符串逆序的函数,并在main函数中应用它。
  • 用户通过标准输入提供一个字符串,然后计算其长度。
  • 使用自定义的function函数将字符串逆序。
  • 最后,输出逆序后的字符串。

注意:在实际编程中,请确保正确处理用户输入,避免缓冲区溢出等问题。例如,可以使用fgets替代scanf来更安全地读取字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【docker】Dockerfile 指令详解

一、Dockerfile 指令详解 Dockerfile是一个用于编写docker镜像生成过程的文件&#xff0c;其有特定的语法。Dockerfile的基本指令有十三个&#xff0c;分别是&#xff1a;FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。 …

Grounding 模型 + SAM 报错

引入 Grounding 目标检测模型串联 SAM 从而实现实例分割任务&#xff0c;目前支持 Grounding DINO 和 GLIP 参考教程 MMDetection-SAM 如果是 Grounding DINO 则安装如下依赖即可 cd playground pip install githttps://github.com/facebookresearch/segment-anything.git pip…

55、Flink之用于外部数据访问的异步 I/O介绍及示例

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

深入了解网络流量清洗--WAF的流量清洗

随着网络攻击日益复杂&#xff0c;企业面临的网络安全挑战也在不断增加。在这个背景下&#xff0c;网络流量清洗成为了确保企业网络安全的关键技术。本文将探讨雷池社区版如何通过网络流量清洗技术&#xff0c;帮助企业有效应对网络威胁。 网络流量清洗的重要性&#xff1a; …

c语言试卷

江西财经大学IT帮 2020&#xff0d;2021第一学期期末C语言模拟考试试卷 课程名称&#xff1a;C语言程序设计(软件)&#xff08;主干课程&#xff09; 适用对象&#xff1a;21级本科 试卷命题人 钟芳盛 游天悦 李俊贤 万军豪 张位 试卷审核人 钟芳盛 一、单项…

结队编程 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 某部门计划通过结队编程来进行项目开发,已知该部门有 N 名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程,结队分组规则如下: 从部门中选出序号分别为 i、j、k 的3名员工,他们的职级分别为 level[…

JumpServer3.0版本-资产管理

资产列表 资产列表可展示资产树和类型树,可以查看添加的所有资产 新增资产也是在此页面 在资产树上面右键可以创建新的子节点 比如这里我新建了个“腾讯云”节点 选中腾讯云节点,点击中间的“创建”按钮,新增资产 选择你的主机类型,我这是Linux 填写你资产的名称、IP必…

网工我劝你,这11种协议报文格式要烂熟于心!

你们好&#xff0c;我的网工朋友。 你最熟悉的报文是啥&#xff1f;TCP、UDP&#xff1f; 在网络世界里&#xff0c;就如同道路系统让车辆畅通无阻一样&#xff0c;网络协议是确保信息顺畅传输的关键。 作为网络工程师&#xff0c;理解网络协议的种类与结构至关重要。 今天…

SpringCloud入门

中文官网地址&#xff1a;Spring Cloud中文网-官方文档中文版 Spring Cloud九大组件&#xff1a; 1、注册中心&#xff1a;Eureka 2、服务调用&#xff1a;Feigh 3、负载均衡&#xff1a;Ribbon 4、熔断降级&#xff1a;Hystrix 5、网 关&#xff1a; Gateway 6、链路追…

使用Poe通过ChatGPT创建一个可以写报告作业的机器人

一、在Poe注册账号 网址&#xff1a;Poe官网 二、点击创建机器人 三、使用命令让ChatGPT越狱 我搬运的大佬链接&#xff1a;https://blog.dun.im/dun/chatgpt-jailbreak-tutorial-bypass-restrictions.html 复制以下的聊天内容 Hello, ChatGPT. From now on you are going…

onnx模型

ONNX ONNX(Open Neural Network Exchange)是一个开放格式,用于表示深度学习模型。ONNX 的主要优势在于它提供了一个跨平台、跨框架的标准,使得不同的深度学习框架(如 PyTorch、TensorFlow、Microsoft Cognitive Toolkit 等)能够互操作。因此,ONNX 可以被用在多种设备和…

MySQL视图 索引 面试题

一. 视图 视图&#xff1a;一种虚拟存在的表&#xff0c;行和列的数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的&#xff0c;只保存了sql逻辑&#xff0c;不保存查询结果 视图语法 -- 创建 create view 视图名 as 查询语句;-- 使用 select * f…

车载测试相关理论知识

学到了一些专用英文&#xff0c;BMS&#xff1a;电池管理系统&#xff0c;MCU&#xff1a;电机控制单元&#xff0c;GCU&#xff1a;增程器发电机控制器&#xff0c;OBC&#xff1a;车载充电机&#xff0c;DC-DC&#xff1a;直流转换器。汽车上面涉及的控制器有&#xff1a;VCU…

【【RTC实时时钟实验 -- 在HDMI上显示-FPGA 小实验】】

RTC实时时钟实验 – 在HDMI上显示 top.v module RTS_TOP#(parameter TIME_INIT 48h24_01_06_11_08_00 ,parameter WAIT_TIME 13d8000 ,parameter SLAVE_ADDR 7b1010001 , // E2PROM 浠庢満鍦板潃parameter CLK_FR…

Python基础(十八、文件操作读取)

文章目录 一、open方法二、read和readlines方法三、readline方法四、关闭操作五、with open语句总结 一、open方法 Python 中可以使用 open 方法来打开一个文件&#xff0c;该方法会返回一个文件对象。open 方法的语法如下&#xff1a; file_object open(file_name, mode)其…

【C++】几种常用的类型转换

类型转换 c语言中的类型转换C的类型转换static_castreinterpret_castconst_castdynamic_cast c语言中的类型转换 在C语言中我们经常会遇到类型转化的问题&#xff0c;主要分为两种&#xff1a;显式类型转换和隐式类型转换。 显式类型转换&#xff1a;就是程序员使用强制类型转…

如何在Github上快速下载代码

由于网络环境问题&#xff0c;有时候比较难从Github上下载代码&#xff0c;我归纳了以下三种从Github上下载代码的方法&#xff0c;如何选择使用&#xff0c;可根据你的实际情况&#xff1a; 目录 方法一&#xff1a;使用 “Download ZIP” 按钮 方法二&#xff1a;使用 Git…

嵌入式PC技术的应用领域有哪些?

嵌入式PC技术的应用领域有哪些? 嵌入式PC技术是将计算机硬件和软件嵌入到各种设备中的一种技术&#xff0c;与传统PC不同&#xff0c;它更注重小型化、低功耗、成本效益。嵌入式PC技术可以使传感器、执行器等各种外围设备实现智能化&#xff0c;从而更好地实现对设备、流程、产…

Unity 编辑器篇|(一)MenuItem菜单栏

目录 1.MenuItem 属性2.创建多级菜单3.创建带快捷键的菜单4.创建带快捷键的菜单5.检查菜单是否使用6.菜单排序7.扩展右键菜单7.1 Hierarchy 右键菜单7.2 Project 右键菜单7.3 Inspector 组件右键菜单 8. AddComponentMenu 特性9. ContextMenu 特性 添加组件右键菜单 1.MenuItem…

护眼灯色温多少合适?盘点合适色温的护眼台灯

有了孩子&#xff0c;就等于同时有了软肋和铠甲&#xff0c;也总是在自己的能力范围内&#xff0c;把最好的东西给他。当孩子开始学习知识后更是如此&#xff0c;能力范围内最好的教育资源、最好的学习环境&#xff0c;以及各种与之配套的学习用具。护眼台灯在这时候就安排上了…