数字既能以字符串形式存储又能以数值形式存储,把数字存储为字符串就是存储数字字符。C要求用数值形式进行数值运算,但是在屏幕上显示数字要求字符串形式,因为屏幕显示的是字符。printf函数和sprintf函数,通过%d和其它转换说明,把数字从数值形式转换为字符串形式,scanf函数可以把输入字符串转换为数值形式,C还有一些函数专门把字符串形式转换为数值形式。
atoi()函数,用于把字符数字转换为整数,该函数接受一个字符串作为参数,返回相应的整数值。如果字符串仅以字符数字作为开头,atoi函数也能处理,它只能把开头的字符整数转换为整型数。然而如果参数是无字符数字的字符串怎么办,此时atoi函数会返回0。但是C标准并未定义这种情况,因此我们无法它的风险,在这种情况下我们需使用具有错误检测功能的strtol函数。
与atoi函数相同,还有atof()函数和atol()函数,atoi函数转换为int类型的值,而atof函数和atol函数分别转换double类型和long类型的值。这些函数的原型包含在stblib.h头文件中。
ANSI C还提供一套更智能的函数,strtol()函数、strtoul()函数和strtod()函数,分别将字符串转换为long类型和unsigned long类型,double类型的值。这些函数的只能之处在于识别和报告字符串中首字符是否是数字字符,而且对于整型的strtol函数和strtoul函数还可以指定数字的进制。strtol函数的原型long strtol(const char *restrict nptr, char ** restrict endptr, int base);
,nptr是指向待转换字符串的指针,endptr是一个指针的地址,该指针被设置为标识数字结束字符的地址,base表示以什么进制写入数字。strtol函数最多可以到三十六进制,'a'-'z'都可用作数字,而strtod函数只以十进制转换,因此它只需要两个参数。