📜  c 将字符串转换为 size_t - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:13:48.013000             🧑  作者: Mango

将字符串转换为 size_t

在 C 编程语言中,我们经常需要将字符串表示的数字转换成整数类型。其中,size_t 是一种无符号整数类型,用于表示内存块大小、数组索引等。本文将介绍如何使用 C 语言中的函数将字符串转换为 size_t 类型。

使用 strtoul 函数

C 语言提供了一个名为 strtoul 的函数,可以将字符串转换为无符号长整数类型 unsigned long int,也就是 size_t 的基本类型。这个函数的定义如下:

#include <stdlib.h>

unsigned long int strtoul(const char *str, char **endptr, int base);
  • str:指向要被转换的字符串的指针。
  • endptr:指向指针的指针,用来存储停止转换的字符位置的指针,可以为 NULL
  • base:表示待转换的字符串采用的进制数,例如二进制为 2,十进制为 10,十六进制为 16。如果为 0,则表示根据 str 的首字符自动确定进制数,如 0x 表示十六进制,0 表示八进制,其他则表示十进制。

函数返回值为转换后的无符号长整数类型 unsigned long int。如果转换失败,则返回 0

下面是一个简单的例子:

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

int main() {
    char str[] = "1234567890";
    char *endptr;
    unsigned long int num = strtoul(str, &endptr, 10);
    printf("转换后的数字为:%lu,结束位置:%s\n", num, endptr);
    return 0;
}

将字符串 "1234567890" 转换为 unsigned long int 类型,输出结果为:

转换后的数字为:1234567890,结束位置:
使用 strtoull 函数

如果要将大于等于 unsigned long int 表示范围的字符串转换为 size_t 类型,我们需要使用 strtoull 函数,它的定义如下:

#include <stdlib.h>

unsigned long long int strtoull(const char *str, char **endptr, int base);
  • str:指向要被转换的字符串的指针。
  • endptr:指向指针的指针,用来存储停止转换的字符位置的指针,可以为 NULL
  • base:表示待转换的字符串采用的进制数,用法同 strtoul

函数返回值为转换后的无符号长长整数类型 unsigned long long int。如果转换失败,则返回 0

下面是一个示例程序:

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

int main() {
    char str[] = "18446744073709551615";
    char *endptr;
    size_t num = strtoull(str, &endptr, 10);
    printf("转换后的数字为:%zu,结束位置:%s\n", num, endptr);
    return 0;
}

将字符串 "18446744073709551615" 转换为 size_t 类型,输出结果为:

转换后的数字为:18446744073709551615,结束位置:
总结

使用 strtoulstrtoull 函数可以将字符串转换为 size_t 类型,需要注意的是参数 endptr 所指向字符串的位置表示转换结束的位置,不一定是字符串的结尾。在使用这两个函数时,我们需要检查函数的返回值来判断转换是否成功。