⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strtol.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <stdlib.h>#include <limits.h>#include <errno.h>longstrtol(const char *nptr, char **endptr, int base){	const char *p;	long n, nn;	int c, ovfl, v, neg, ndig;	p = nptr;	neg = 0;	n = 0;	ndig = 0;	ovfl = 0;	/*	 * White space	 */	for(;;p++){		switch(*p){		case ' ':		case '\t':		case '\n':		case '\f':		case '\r':		case '\v':			continue;		}		break;	}	/*	 * Sign	 */	if(*p=='-' || *p=='+')		if(*p++ == '-')			neg = 1;	/*	 * Base	 */	if(base==0){		if(*p != '0')			base = 10;		else{			base = 8;			if(p[1]=='x' || p[1]=='X'){				p += 2;				base = 16;			}		}	}else if(base==16 && *p=='0'){		if(p[1]=='x' || p[1]=='X')			p += 2;	}else if(base<0 || 36<base)		goto Return;	/*	 * Non-empty sequence of digits	 */	for(;; p++,ndig++){		c = *p;		v = base;		if('0'<=c && c<='9')			v = c - '0';		else if('a'<=c && c<='z')			v = c - 'a' + 10;		else if('A'<=c && c<='Z')			v = c - 'A' + 10;		if(v >= base)			break;		nn = n*base + v;		if(nn < n)			ovfl = 1;		n = nn;	}    Return:	if(ndig == 0)		p = nptr;	if(endptr)		*endptr = (char *)p;	if(ovfl){		errno = ERANGE;		if(neg)			return LONG_MIN;		return LONG_MAX;	}	if(neg)		return -n;	return n;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -