/************************************************************
* 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!