文章目录
本问已整合到整合到 C语言标准库深度解读
stdlib
stdlib中定义了6个将字符串转为数值的函数,分别用于浮点、整型、长整型和无符号长整型,为了书写上的便捷,下文中令
#define cSTR const char *str
#define END char **endptr
其中,str为一个字符串,endptr则为字符串指针,则stdlib.h中的字符串转换函数如下表所示
返回值类型 | 简单 | 高级 |
---|---|---|
double | atof(cSTR) | strtod(cSTR, END) |
int | atoi(cSTR) | |
long int | atol(cSTR) | strtol(cSTR, END, int base) |
unsigned long int | strtoul(cSTR, END, int base) |
其中,若endptr不为空,则会保存转换数值之后的指针位置;base介于2和36(包含)之间,表示转换整型的基数。
此外,stdlib中还有4个用于不同宽度的字符数组之间的转化函数,主要是char类型和wchar_t之间的转化。
在C++中,除了char
作为字符类型的保留字之外,还有三个不同宽度的字符类型作为表达式:wchar_t
, char16_t
, char32_t
;到了C++11,又新增了char16_t
和char32_t
。
在C语言中,尽管只有一个char
是保留字,单并不妨碍定义其他数据类型,wchar_t
被定义在stddef.h
中,本质上是一个int
。字符串和wchar_t
之间的转换函数包括
- size_t mbstowcs(wchar_t *pwcs, cSTR, size_t n):str转为pwcs
- size_t wcstombs(char *str, const wchar_t *pwcs, size_t n):pwcs转为str
- int wctomb(char *str, wchar_t wchar):wchar转为str
- int mbtowc(whcar_t *pwc, cSTR, size_t n):str转为pwc
此外,stdlib.h
中还定义了一个计算字符串长度的函数mblen
,和string.h
中的strlen
的区别在于,mblen
中多了一个最大字节数的参数n
:
int mblen(cSTR, size_t n)