/************************************************************
* c primer plus P315 11.29 ---尝试使用strtol()函数
*************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char number[30];
char *end;
long value;
puts("Enter a number(empty line to quit):)");
while(gets(number) && number[0] != '/0')
{
value = strtol(number, &end, 10); //end是个地址,&end就是地址的地址
printf("value: %ld, stopped at %s(%d)/n", value, end, *end);
value = strtol(number, &end, 16);
printf("value: %ld, stopped at %s(%d)/n", value, end, *end);
puts("next number: ");
}
puts("Bye!");
getchar();
return 0;
}
strtol()的函数原型:long strtol(const char *nptr, char **endptr, int base); 第一个参数是要进行操作的字符串,第二个指针的指针,是字符串中指向非数字部分的第一个字符的指针的地址,第三个指出进制,(10就是转换成十进制的,16就是转换成16进制的. )10就是看做十进制的,16就是看做十六进制的。这个函数得到的数都是十进制的。参数base范围从2至36,或0。当base值为0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用16进制做转换、遇到’0’前置字符而不是’0x’的时候会使用8进制做转换。
一个输出示例:
Enter a number(empty line to quit):
10
value: 10, stopped at (0) //将“10”看做十进制的,得到10
value: 16, stopped at (0) //将“10”看做十六进制的,得到十进制的数16
Next Number:
10atm
value: 10, stopped at atom(97) //读完10,下个字符a就不能读了
value: 266, stopped at tom(116) //读完10a,下个t不能读了, 10a转换成十进制的数266
Next Number:
Bye!