迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

在 C 语言中转换 Char*为 Int

作者:迹忆客 最近更新:2023/03/27 浏览次数:

本文将介绍几种在 C 语言中如何将 char*转换为 int 的方法。


使用 strtol 函数在 C 语言中把 char*转换为 int

strtol 函数是 C 标准库的一部分,它可以将 char*数据转换成用户指定的长整数值。该函数需要 3 个参数,其中第一个参数是字符串所在的指针。注意,这个 char 指针参数是不被修改的,有一个 const 限定符。第二个参数可以利用它来存储遇到的第一个无效字符,或者在没有找到数字的情况下存储整个字符串。第三个参数指定要转换的数字的基数,这个参数的值应该在 2 和 36 之间。下面的例子显示了如何将 char*数组中的元素转换为整数并输出到控制台。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printIntegers(long int arr[], size_t size)
{
    for (size_t i = 0; i < size; i++)
        printf("%4ld | ", arr[i]);
    printf("\n");
}

int main(int argc, char *argv[]) {
    char *arr[] = {"12", "33", "43", "23", "90"};

    size_t len = sizeof arr / sizeof arr[0];
    long int arr3[len];
    for (int i = 0; i < len; ++i) {
        arr3[i] = strtol(arr[i], NULL, 10);
    }
    printIntegers(arr3, len);

    exit(EXIT_SUCCESS);
}

输出:

12 |   33 |   43 |   23 |   90 |

作为另一种选择,我们可以将程序参数作为输入字符串,并将其转换为整数类型。

注意 ,我们需要使用 int argc,char* argv[] 作为 main 函数的参数来访问程序参数并进行处理。接下来的示例代码将检查用户提供的程序参数是否至少是单一参数,如果不是,则退出显示相应的错误信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printIntegers(long int arr[], size_t size)
{
    for (size_t i = 0; i < size; i++)
        printf("%4ld | ", arr[i]);
    printf("\n");
}

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("Usage: ./%s int1 int2 int3...\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    long int arr2[argc-1];
    for (int i = 0; i < argc-1; ++i) {
        arr2[i] = strtol(argv[i+1], NULL, 10);
    }
    printIntegers(arr2, argc - 1);

    exit(EXIT_SUCCESS);
}

在 C 语言中正确验证 strtol 函数将 char*转换为 int 的结果

即使我们在前面的例子中成功地使用 strtol 调用将作为程序参数传递的字符串转换为整数,但给定的程序仍有很大的可能性会失败。建议为 strtol 函数调用实现错误检查例程,以保证程序的稳健执行并有相应的错误记录。我们将检查转换后的整数是否在 long 类型的范围内,以及转换本身是否不成功。此外,我们还会检查有效整数后面是否有字符,给定的输入是否是十进制数。不过请注意,在每种情况下,我们都会将错误信息打印到 stderr 流中,而不会终止程序,但你应该根据你的需求考虑另一个处理例程。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <limits.h>

void printIntegers(long int arr[], size_t size)
{
    for (size_t i = 0; i < size; i++)
        printf("%4ld | ", arr[i]);
    printf("\n");
}

int main(int argc, char *argv[]) {

    if (argc < 2) {
        printf("Usage: ./%s int1 int2 int3...\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    long int num;
    char *endptr, *str = argv[1];
    errno = 0;
    long ret = strtol(str, &endptr, 10);

    if (str == endptr) {
        fprintf(stderr, "%s: not a decimal number\n", str);
    } else if ('\0' != *endptr) {
        fprintf(stderr, "%s: extra characters at end of input: %s\n", str, endptr);
    } else if ((LONG_MIN == ret || LONG_MAX == ret) && ERANGE == errno) {
        fprintf(stderr, "%s out of range of type long\n", str);
    } else if (errno != 0 && ret == 0) {
        fprintf(stderr, "%s no conversion was performed\n", str);
    } else {
        num = ret;
        printf("num: %ld\n", num);
    }

    exit(EXIT_SUCCESS);
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便