C 库函数
long int strtol(const char *str, char **endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。
函数原型
下面是 strtol() 函数的原型:
long int strtol(const char *str, char **endptr, int base)
参数
- str 要转换为长整数的字符串。
- endptr 对类型为 char* 的对象的引用,中数值后的下其值由函数设置为 str 一个字符。
- base 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。
可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,
合法字符为‘0’,‘1’,……‘7’;base为10时,合法字符为‘0’,‘1’,……‘9’;base 为16时,合法字符
为‘0’,‘1’,……‘9’,‘a’,……‘f’;base为24时,合法字符为‘0’,……‘9’,‘a’,……‘n’,base为36时
合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。
当字符合法时,‘0’,……‘9’依次被转换为十进制的0~9,‘a’,……‘z’一次北转换为十进制的10~35。
strtol()函数检测到第一个非法字符时,立即停止检测,其后的所有字符都会被当作非法字符处理。
合法字符串会被转换为long int, 作为函数的返回值。非法字符串,即从第一个非法字符的地址,
被赋给*endptr。**endptr是个双重指针,即指针的指针。strtol()函数就是通过它改变*endptr
的值,即把第一个非法字符的地址传给endptr。
多数情况下,endptr设置为NULL, 即不返回非法字符串。
返回值
该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。
实例
下面的实例演示了 strtol() 函数的用法。
实现了Linux系统命令chmod
int main(int argc,char *argv[])
{
if(argc<3)
{
printf("Usage ./a.out filename privilege!");
exit(1);
}
long Privilege = strtol(argv[2],755);
int ret = chmod(argv[1],755);
if(-1 == ret)
{
perror("chmod");
exit(1);
}
return(0);
}