初学者一边看书一边提问 关于strtol() 多则多则!

菜鸟一边看书一边提问 关于strtol() 多则多则!!
书上说,这个函数和atoi()类似,他们的区别在于:前者可以识别并报告字符串中非数字部分的第一个字符,并且允许指定数字的基数.

但是这个程序:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  char number[30];
  char * end;
  long value;

  puts("Enter a number (empty line to quit):");
  while(gets(number) && number[0] != '\0') //number 被赋值 
  {
  value = strtol(number, &end, 10);  
  printf("value: %ld, stopped at %s (%d)\n",
  value, end, *end);
  value = strtol(number, &end, 16); /* base 16 */
  printf("value: %ld, stopped at %s (%d)\n",
  value, end, *end);
  puts("Next number:");
  }
  puts("Bye!\n");
   
  return 0;
}



  value = strtol(number, &end, 10); 这句
书上直说的基数是10 输入10就是10 如果基数是16 输入10就是16

我搞不清楚这个基数到底是做什么的? 能通俗的讲解下啊? 大哥大姐

还有就是这个我输入的:
11 22 33
value: 11, stopped at 22 33 (32)
value: 17, stopped at 22 33 (32)
Next number:
11 33
value: 11, stopped at 33 (32)
value: 17, stopped at 33 (32)
Next number:
11 12
value: 11, stopped at 12 (32)
value: 17, stopped at 12 (32)
Next number:
11 45
value: 11, stopped at 45 (32)
value: 17, stopped at 45 (32)


为什么这个*end 输出永远都是32呢?

------解决方案--------------------
恭喜楼主,贺喜楼主。