在 C 语言中转换 Char*为 Int

在 C 语言中转换 Char*为 Int

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

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

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

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

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

#include

#include

#include

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

#include

#include

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

#include

#include

#include

#include

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);

}

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe

相关拼贴

bet3365备用 什么是元数据

什么是元数据

📅 07-13 👀 5256