atoi函数学习

文章目录

  • 一、atoi函数
    • 1、函数原型
    • 2、函数功能
    • 3、函数返回
  • 二、atoi使用
  • 三、atoi函数模拟实现


一、atoi函数

1、函数原型

在这里插入图片描述
atoi函数参数为一个字符指针,返回类型是int,作用将字符串转换为整型。使用函数需要包含头文件stdlib.h

2、函数功能

在这里插入图片描述

  • 解析c字符串,将其内容解析为整数,该整数作为返回值进行返回
  • 该函数首先需要根据需要丢弃任意数量的空白字符(像使用isspace函数进行判断),直到找到第一个非空白字符。然后,从该字符开始采用可选的首字母进行加减,也就是将字符数字转换为整型数字并且将它返回
  • 字符串可以包含构成整数的其他字符,这些字符将被忽略,不会影响函数的功能实现
  • 如果首次出现在str这个字符串中的非空白字符不是有效的数字类型的字符,或者由于为空或仅包含空白字符而不存在此类序列,则不执行转换并返回零。

3、函数返回

在这里插入图片描述

如果成功,这个函数返回这个转换成整型的整型数字
如果转换后的值超出 一个整型数据的可表示值范围,则会导致未定义的行为。


二、atoi使用

要想学会函数的模拟实现我们除了要熟悉函数以上的介绍,还需要用atoi函数进行调试参考,具体观察atoi的功能实现

1、传进去一个空字符,返回值为0
在这里插入图片描述

2、如果在出现数据之前都是空白字符,则跳过空白字符

在这里插入图片描述

3、如果数值存在正负号,返回的数据也会分为正负数
在这里插入图片描述
在这里插入图片描述

4、后续数据如果碰到非数字字符则直接返回前面转换完的数字

在这里插入图片描述
在这里插入图片描述

5、如果超出了整型数据的范围,则返回最大值或者最小值
在这里插入图片描述


三、atoi函数模拟实现

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
int my_atoi(const char* str)
{
	//判断传进来的字符指针的有效性,空指针无法进行访问与使用
	assert(str);

	//判断传进来的字符是否为空字符,是则返回0
	if (*str == '\0')
	{
		return 0;
	}

	//判断传进来的数字是否是空白字符
	while (isspace(*str))
	{
		str++;
	}

	//判断正负号
	int flag = 1;
	if (*str == '+')
	{
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}


	//判断是否是字符数字
	long long  ret = 0;
	while (*str != '\0')
	{
		if (isdigit(*str))
		{
			//将字符数字转换为整型数据的数字
			ret = ret * 10 + (*str - '0') * flag;
			//                得到的是整型数字      整体的则是具有个位,十位,百位这种进制形式的
			
			//判断是否超过了整型的最大值和最小值
			if (ret > INT_MAX)
			{
				ret = INT_MAX;
			}
			if (ret < INT_MIN)
			{
				ret = INT_MIN;
			}
		}
		else
		{
			return (int)ret;
		}
		str++;
	}

	return (int)ret;

}
int main()
{
	char arr[] = "  9999999999999999999999999999";
	int ret = my_atoi(arr);
	printf("%d", ret);
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于vue框架的的考研信息共享平台v0eyp(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;国家政策,用户,院校政策,院校信息,考研资料,资料分类,考研论坛 开题报告内容 基于Vue框架的考研信息共享平台开题报告 一、研究背景与意义 随着考研人数的逐年增长&#xff0c;考研学生对高效、便捷、个性化的信息获取需求愈发强烈。…

UG NX二次开发(C#)-计算圆柱面与其他平面的夹角

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、首先创建一个三维模型3、 源代码4、调用代码1、前言 在QQ群中,有群友提问了如何判断圆柱面与某一平面是否垂直,我这里以案例的形式计算圆柱面主轴矢量与平面法矢的夹角,如果夹角为0,…

【Linux】IPC进程间通信:并发编程实战指南(一)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 进程间通信介绍 &#x1f98b; 1.进程通信的目的&#x1f98b; 2.进程通信的方式 二&#xff1a;&#x1f525; 「匿名管道」通信 &#x1f98b; 匿名管道…

数据采集-Kepware OPCUA 服务器实现

KepserverEX OPC UA server设置 系列文章目录 数据采集-Kepware 安装证书异常处理 目录 KepserverEX OPC UA server设置系列文章目录一、OPC UA(OPC Unified Architecture)二、防火墙的配置三、配置KepserverEX的OPC UA3.1 启用远程连接3.2 启动OPCUA服务器接口 四、管理OPCU…

spring-boot(mybatisplus条件构造、接口、生成器)

条件构造器 除了新增以外&#xff0c;修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外&#xff0c;还支持更加复杂的where条件。 使用&#xff1a; 第一步创建条件查询&#xff1a; //条件的构造查询 QueryWrapper…

单个相机矫正畸变

1、通过标定助手获取到内参外参&#xff0c;外参在此无效&#xff0c;只用到了内参 2、然后通过halcon算子进行矫正 参考&#xff1a;超人视觉

金华迪加网络科技有限公司现场大屏互动系统存在文件上传漏洞

漏洞描述 金华迪加网络科技有限公司专注于开发和优化现场互动系统平台,其主要产品是现场活动大屏幕系统。这个系统被设计用于增强活动现场的互动性&#xff0c;提供技术支持给合作企业。某公司现场大屏互动系统存在文件上传漏洞&#xff0c;未经身份验证的攻击者通过漏洞上传恶…

构 造 器

我们创建了一个对象&#xff0c;在其中定义了属性&#xff0c;new一个对象&#xff0c;然后设置对应的属性&#xff0c;但是我们可以在new对象的时候&#xff0c;同时传入我们要设置的属性&#xff0c;这个时候就需要构造器。 特点 构造方法是一个特殊的成员方法&#xff0c;…

Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?

技术背景 我们在做Android平台RTSP、RTMP播放器的时候&#xff0c;经常遇到这样的技术诉求&#xff0c;开发者希望拿到播放器解码后的YUV或RGB数据&#xff0c;投递给视觉算法&#xff0c;做AI分析&#xff0c;本文以ffmpeg和大牛直播SDK的SmartPlayer为例&#xff0c;介绍下相…

个体营业执照经营异常多久解除

经营异常是怎么回事&#xff1f;是什么意思&#xff1f;首先&#xff0c;我们要明确什么是公司经营异常。简单来说&#xff0c;就是公司在经营过程中出现了一些问题&#xff0c;导致公司无法正常运营。这些问题可能包括未按规定报送年度报告、未按规定公示有关信息等。那么&…

Air780E如何发送SMS?一文详解!

今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息&#xff1a; 一、SMS简介 SMS&#xff08;短消息服务&#xff0c;ShortMessageService&#xff09;功能主要用于在蜂窝网络中传输短消息。 在4G网络中&#xff0c;短信可以在数据传输的同时进行&#xff0c;不会因数…

金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现

0x01 产品简介 金华迪加现场大屏互动系统是一种集成了先进技术和创意设计的互动展示解决方案,旨在通过大屏幕和多种交互方式,为观众提供沉浸式的互动体验。该系统广泛应用于各类活动、展览、会议等场合,能够显著提升现场氛围和参与者的体验感。 0x02 漏洞概述 金华迪加 现…

基于Java+SpringBoot+Vue的视频网站系统的设计与实现

基于JavaSpringBootVue的视频网站系统的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1…

ComfyUI - ComfyUI 工作流中集成 SAM2 + GroundingDINO 处理图像与视频 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/143359538 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 SAM2 与…

【华硕天选5开机黑屏只有鼠标,调用资源管理器也无法黑屏状态的一种解决方式】

华硕天选5开机黑屏只有鼠标&#xff0c;调用资源管理器也无法黑屏状态的一种解决方式 1.问题描述2.解决方法3.重启如下图 1.问题描述 华硕天选5开机黑屏只有鼠标&#xff0c;调用资源管理器&#xff08;ctrlalt.&#xff09;也无法黑屏状态。 2.解决方法 ctrl shitf10 就能正…

CAN通讯中常见的接口异常问题及其解决方案

控制器局域网(CAN)是一种广泛应用于汽车、工业自动化等领域的串行通信网络。由德国博世公司(Bosch)和英特尔(Intel)共同开发的CAN协议因其高效的实时性、良好的抗干扰能力和可靠的多主结构,成为了现代汽车电子系统中不可或缺的一部分。随着CAN控制器价格的逐渐降低,越来…

Jmeter基础篇(19)JSR223预处理器

前言 JSR223预处理器是Apache JMeter中的一个组件&#xff0c;它允许用户使用任何支持Java Scripting API (JSR 223) 的脚本语言来执行预处理任务。这个功能非常强大&#xff0c;因为它让测试人员能够利用如Groovy、JavaScript&#xff08;Nashorn引擎&#xff09;、BeanShell…

Unity简易版成就系统

转自&#xff1a; https://learn.u3d.cn/tutorial/achievements-onecredit?chapterId63562b28edca72001f21d129# 脚本AchievementSystem using System.Collections; using UnityEngine; using UnityEngine.UI;public class AchievementSystem : MonoBehaviour {public Achi…

shell脚本案例:RAC配置多路径时获取磁盘设备WWID和磁盘大小

使用场景 在RAC配置多路径时&#xff0c;需要获取到磁盘设备的wwid。因为RAC的磁盘配置是提前规划好的&#xff0c;只知道wwid&#xff0c;不知道磁盘对应大小&#xff0c;是不知道应该如何配置多路径的mutipath.conf文件的&#xff1b;而凭借肉眼手工去对应磁盘设备的wwid和大…

数据建模圣经|数据模型资源手册卷3,数据建模最佳实践

简介 本书采用了类设计模式的方式对数据模型进行高度抽象总结&#xff0c;展现了常见的数据模型构建模型等模型的作用、层次、分类、地位、沟通方式&#xff0c;和业务规则。使用一个强大的数据模型模式的数据建模&#xff0c;评估特定与广义模型的优缺点&#xff0c;有助于你改…