strtol()
把字符串转换成long类型值
strtol()函数
原型:
long strtol (const char * restrict nptr, char ** restrict endptr,int base );
这里,nptr
是指向转换字符串的指针,endptr
是一个指针的地址,该指针被设置为标识输入数字结束字符的地址。base
表示以什么进制写入数字
/*strcnvt.c --使用strtol()*/
#include <stdio.h>
#include <stdlib.h>
#define LIM 30
char * s_gets(char * st, int n);
int main()
{
char ar[LIM];
char *end; //有效数字结束位置的指向,输入10,该指针将会指向0后面的空字符'\0'
//如果输入的是10abc,该指针将会指向a所在的位置,将会输出a所对应的ASCII码
long value;
puts("输入一个数字(空行退出):");
while (s_gets(ar, LIM) && ar[0] != '\0')
{
value = strtol(ar, &end, 10); //ar指向转换字符串的指针
//双层夹心--&end :标明指针end的地址(意思是表明指向有效数字结束的指针的地址)
//10 :转换为10进制
printf("base 10 input,base 10 output:%ld,stopped at %s (%d)\n", value, end, *end);
printf("----------------------");
value = strtol(ar, &end, 16);
printf("base 16 input,base 16 output:%ld,stopped at %s (%d)\n", value, end, *end);
puts("Next number:");
}
puts("Bye!\n");
return 0;
}
char*s_gets(char *st, int n)
{
char * ret_val;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
int i = 0;
while (st[i] != '\n' && st[i] != '\0')
{
i++;
}
if (st[i] == '\n')
{
st[i] = '\0';
}
else
while (getchar() != '\n')
continue;
}
return ret_val;
}