【ARM 嵌入式 C 入门及渐进 18 -- 字符数字转整形函数 atoi 介绍】

2024-03-28 04:04

本文主要是介绍【ARM 嵌入式 C 入门及渐进 18 -- 字符数字转整形函数 atoi 介绍】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


请阅读【嵌入式开发学习必备专栏 】


文章目录

    • 字符数字转整形函数 atoi
      • atoi 简单实现

字符数字转整形函数 atoi

在 C 语言中,main 函数能够接收命令行参数。这些参数通过两个参数传递给 main 函数:int argcchar *argv[]argc 是命令行参数的数量,argv 是参数的数组,其中 argv[0] 是程序的名称,argv[1]argv[argc-1] 是命令行传递的参数。
如果你想要接收三个参数并将它们作为数字字符串转换为整数,你可以这样写 main 函数:

#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[]) 
{if (argc != 4) { // 程序名称 + 3 个参数printf("Usage: %s num1 num2 num3\n", argv[0]);return 1;}// 将参数字符串转换为整数int num1 = atoi(argv[1]);int num2 = atoi(argv[2]);int num3 = atoi(argv[3]);// 使用转换后的整数printf("The numbers are: %d, %d, %d\n", num1, num2, num3);// 你的逻辑代码...return 0;
}

在这个示例中,atoi 函数被用来将命令行参数(字符串)转换为整数。请注意 atoi 函数不会报告数字字符串转换失败的情况,如果传入的字符串不是有效的数字表示,它将返回 0。如果你需要更健壮的错误检查,请使用 strtolsscanf 等函数代替。
编译并运行这个程序,你可以这样调用它:

./your_program 123 456 789

这里,your_program 是你的可执行文件的名称,123, 456, 789 是你传递给程序的三个数字字符串参数。程序将输出:

The numbers are: 123, 456, 789

确保你的程序能够处理非数字字符串的情况,如果需要,可以添加适当的错误检查。

atoi 简单实现

atoi (ASCII to Integer)是一个将字符串转换为整数的 C 语言标准库函数。以下是 atoi 函数的一个简单实现,它模拟了标准库函数的基本行为:

#include <stdio.h>
#include <ctype.h>
int my_atoi(const char *str) {int result = 0;int sign = 1;// 跳过前面的空白字符while (isspace((unsigned char)*str)) {str++;}// 检查正负号if (*str == '-') {sign = -1;str++;} else if (*str == '+') {str++;}// 转换数字部分while (isdigit((unsigned char)*str)) {result = result * 10 + (*str - '0');str++;}return sign * result;
}
int main() {char str[] = "  -12345";int val = my_atoi(str);printf("%d\n", val);return 0;
}

在这个实现中,my_atoi 函数首先跳过任何空白字符,然后检查一个可选的正负号。接着,它开始处理字符串中的数字字符,将每个字符转换为对应的数字并加到结果中。一旦遇到非数字字符,就停止处理。

这个简单的实现不处理溢出,也不处理非法输入字符串(如包含非数字字符的字符串)。标准的 atoi 函数通常会有更复杂的错误检查和行为,以处理各种边界情况和溢出。如果需要处理溢出,通常会使用 strtolstrtoll 函数,它们提供了额外的错误检查功能。

这篇关于【ARM 嵌入式 C 入门及渐进 18 -- 字符数字转整形函数 atoi 介绍】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854386

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir