
C语言中可以通过使用标准库函数将字符串转换为数字,包括atoi、atol、atoll、strtol、strtoll、strtoul和strtoull等。最常用的方法是使用atoi、strtol和strtod函数。 其中,atoi函数简单易用,适用于转换整数字符串,而strtol函数更加灵活,能够提供错误检测和进制转换功能。接下来,我们将详细探讨这些方法的具体使用方式和注意事项。
一、使用atoi函数
atoi函数是C标准库中的一个函数,用于将字符串转换为整数。其原型为:
int atoi(const char *str);
1.1、基本用法
atoi函数将字符串中的数字部分转换为整数,并忽略前导空格字符。它不进行错误检测,因此如果字符串中包含非数字字符,它将返回未定义的结果。
#include <stdio.h>
#include <stdlib.h>
int main() {
char str1[] = "1234";
char str2[] = "56abc78";
char str3[] = " 90";
int num1 = atoi(str1);
int num2 = atoi(str2);
int num3 = atoi(str3);
printf("num1 = %dn", num1); // 输出: num1 = 1234
printf("num2 = %dn", num2); // 输出: num2 = 56
printf("num3 = %dn", num3); // 输出: num3 = 90
return 0;
}
1.2、局限性
atoi函数在处理无效输入时没有错误检测机制,这可能会导致程序的不可预测行为。因此,使用atoi时必须确保输入字符串是有效的数字字符串。
二、使用strtol函数
strtol函数提供了更强大的字符串到整数转换功能,并且能够处理错误和不同进制的数字。其原型为:
long int strtol(const char *nptr, char endptr, int base);
2.1、基本用法
strtol函数将字符串转换为长整型数,nptr是要转换的字符串,endptr是指向第一个非数字字符的指针,base是转换的进制数(如10进制、16进制等)。
#include <stdio.h>
#include <stdlib.h>
int main() {
char str1[] = "1234";
char str2[] = "56abc78";
char str3[] = " 90";
char *end;
long num1 = strtol(str1, &end, 10);
long num2 = strtol(str2, &end, 10);
long num3 = strtol(str3, &end, 10);
printf("num1 = %ldn", num1); // 输出: num1 = 1234
printf("num2 = %ldn", num2); // 输出: num2 = 56
printf("num3 = %ldn", num3); // 输出: num3 = 90
return 0;
}
2.2、错误检测
通过检查end指针,可以确定字符串转换是否成功。如果end指向的字符不是空字符,说明转换过程中遇到了非数字字符。
#include <stdio.h>
#include <stdlib.h>
int main() {
char str1[] = "1234";
char str2[] = "56abc78";
char str3[] = " 90";
char str4[] = "abc123";
char *end;
long num1 = strtol(str1, &end, 10);
if (*end != '