常见系统函数

  • 格式:docx
  • 大小:23.90 KB
  • 文档页数:11

1.//*********************************************************************** char* reverse(char* Array){int len = strlen(Array);for(int i=0;i<len/2;i++){char temp=*(Array+i);*(Array+i)=*(Array+len-1-i);*(Array+len-1-i)=temp;}*(Array+len)='\0';return Array;}2.//*********************************************************************** long __cdecl atol(const char *nptr){int c; /* current char */long total; /* current total */int sign; /* if '-', then negative, otherwise positive *//* skip whitespace */while ( isspace((int)(unsigned char)*nptr) )++nptr;c = (int)(unsigned char)*nptr++;sign = c; /* save sign indication */if (c == '-' || c == '+')c = (int)(unsigned char)*nptr++; /* skip sign */total = 0;while (isdigit(c)) {total = 10 * total + (c - '0'); /* accumulate digit */c = (int)(unsigned char)*nptr++; /* get next char */}if (sign == '-')return -total;elsereturn total; /* return result, negated if necessary */}3.//***********************************************************************判断一个链表是否为循环链表(追赶法)bool isLoop(link *head){link *p = head;link *q = head;while(p != NULL && q != NULL && q->next != NULL){p = p->next;q = q->next->next;if(p == q)return true;}return false;}4.//*********************************************************************** char * __cdecl strchr (const char * string,int ch){while (*string && *string != (char)ch)string++;if (*string == (char)ch)return((char *)string);return(NULL);}5.//*********************************************************************** char *strstr (char *buf,char *sub){char *bp;char *sp;if (!*sub)return buf;while (*buf){bp = buf;sp = sub;while (*bp++ == *sp++){if (!*sp)return buf;}buf += 1;}return NULL;}6.//*********************************************************************** int strcmp (const char * src, const char * dst){int ret = 0 ;while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)++src, ++dst;if ( ret < 0 )ret = -1 ;else if ( ret > 0 )ret = 1 ;return( ret );}7.//*********************************************************************** size_t strlen (const char * str){const char *eos = str;while( *eos++ ) ;return( eos - str - 1 );}8.//*********************************************************************** int __cdecl printf (const char *format,...)/** stdout 'PRINT', 'F'ormatted*/{va_list arglist;int buffing;int retval;va_start(arglist, format);_ASSERTE(format != NULL);_lock_str2(1, stdout);buffing = _stbuf(stdout);retval = _output(stdout,format,arglist);_ftbuf(buffing, stdout);_unlock_str2(1, stdout);return(retval);}9.//*********************************************************************** void * __cdecl memcpy (void * dst,const void * src,size_t count){void * ret = dst;#if defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC){extern void RtlMoveMemory( void *, const void *, size_t count );RtlMoveMemory( dst, src, count );}#else /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */ /** copy from lower addresses to higher addresses*/while (count--) {*(char *)dst = *(char *)src;dst = (char *)dst + 1;src = (char *)src + 1;}#endif /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */return(ret);}10.//********************************************************************** int __cdecl memcmp (const void * buf1,const void * buf2,size_t count){if (!count)return(0);while ( --count && *(char *)buf1 == *(char *)buf2 ) {buf1 = (char *)buf1 + 1;buf2 = (char *)buf2 + 1;}return( *((unsigned char *)buf1) - *((unsigned char *)buf2) );}11.//********************************************************************** void * __cdecl memset (void *dst,int val,size_t count){void *start = dst;#if defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC){extern void RtlFillMemory( void *, size_t count, char );RtlFillMemory( dst, count, (char)val );}#else /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */ while (count--) {*(char *)dst = (char)val;dst = (char *)dst + 1;}#endif /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */return(start);}12.//********************************************************************** char * __cdecl _strset (char * string,int val){char *start = string;while (*string)*string++ = (char)val;return(start);}13.//********************************************************************** char * __cdecl strcat (char * dst,const char * src){char * cp = dst;while( *cp )cp++; /* find end of dst */while( *cp++ = *src++ ) ; /* Copy src to end of dst */return( dst ); /* return dst */}14.//**********************************************************************void * __cdecl memchr (const void * buf,int chr,size_t cnt){while ( cnt && (*(unsigned char *)buf != (unsigned char)chr) ) {buf = (unsigned char *)buf + 1;cnt--;}return(cnt ? (void *)buf : NULL);}15.//**********************************************************************#define _TOLOWER(c) ( ((c) >= 'A') && ((c) <= 'Z') ? ((c) - 'A' + 'a') :\(c) )int __cdecl _memicmp (const void * first,const void * last,unsigned int count){int f = 0;int l = 0;#ifdef _MTint local_lock_flag;#endif /* _MT */#if defined (_WIN32)if ( __lc_handle[LC_CTYPE] == _CLOCALEHANDLE ) {#endif /* defined (_WIN32) */while ( count-- ){if ( (*(unsigned char *)first == *(unsigned char *)last) ||((f = _TOLOWER( *(unsigned char *)first )) ==(l = _TOLOWER( *(unsigned char *)last ))) ){first = (char *)first + 1;last = (char *)last + 1;}elsebreak;}#if defined (_WIN32)}else {_lock_locale( local_lock_flag )while ( count-- )if ( (*(unsigned char *)first == *(unsigned char *)last) ||((f = _tolower_lk( *(unsigned char *)first )) ==(l = _tolower_lk( *(unsigned char *)last ))) ){first = (char *)first + 1;last = (char *)last + 1;}elsebreak;_unlock_locale( local_lock_flag )}#endif /* defined (_WIN32) */return ( f - l );}16.//********************************************************************** void * __cdecl memmove (void * dst,const void * src,size_t count){void * ret = dst;#if defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC){extern void RtlMoveMemory( void *, const void *, size_t count );RtlMoveMemory( dst, src, count );}#else /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */if (dst <= src || (char *)dst >= ((char *)src + count)) {/** Non-Overlapping Buffers* copy from lower addresses to higher addresses*/while (count--) {*(char *)dst = *(char *)src;dst = (char *)dst + 1;src = (char *)src + 1;}}else {/** Overlapping Buffers* copy from higher addresses to lower addresses*/dst = (char *)dst + count - 1;src = (char *)src + count - 1;while (count--) {*(char *)dst = *(char *)src;dst = (char *)dst - 1;src = (char *)src - 1;}}#endif /* defined (_M_MRX000) || defined (_M_ALPHA) || defined (_M_PPC) */return(ret);}17.//********************************************************************** int __cdecl _stricmp (const char * dst,const char * src){return( _strcmpi(dst,src) );}int __cdecl _strcmpi(const char * dst, const char * src){int f,l;#ifdef _MTint local_lock_flag;#endif /* _MT */#if defined (_WIN32)if ( __lc_handle[LC_CTYPE] == _CLOCALEHANDLE ) {#endif /* defined (_WIN32) */do {if ( ((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z') )f -= ('A' - 'a');if ( ((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z') )l -= ('A' - 'a');} while ( f && (f == l) );#if defined (_WIN32)}else {_lock_locale( local_lock_flag )do {f = _tolower_lk( (unsigned char)(*(dst++)) );l = _tolower_lk( (unsigned char)(*(src++)) );} while ( f && (f == l) );_unlock_locale( local_lock_flag )}#endif /* defined (_WIN32) */return(f - l);}18.//********************************************************************** har * __cdecl strtok (char * string,const char * control){unsigned char *str;const unsigned char *ctrl = control;unsigned char map[32];int count;#ifdef _MT_ptiddata ptd = _getptd();#else /* _MT */static char *nextoken;#endif /* _MT *//* Clear control map */for (count = 0; count < 32; count++)map[count] = 0;/* Set bits in delimiter table */do {map[*ctrl >> 3] |= (1 << (*ctrl & 7));} while (*ctrl++);/* Initialize str. If string is NULL, set str to the saved* pointer (i.e., continue breaking tokens out of the string* from the last strtok call) */if (string)str = string;else#ifdef _MTstr = ptd->_token;#else /* _MT */str = nextoken;#endif /* _MT *//* Find beginning of token (skip over leading delimiters). Note that* there is no token iff this loop sets str to point to the terminal* null (*str == '\0') */while ( (map[*str >> 3] & (1 << (*str & 7))) && *str )str++;string = str;/* Find the end of the token. If it is not the end of the string,* put a null there. */for ( ; *str ; str++ )if ( map[*str >> 3] & (1 << (*str & 7)) ) {*str++ = '\0';break;}/* Update nextoken (or the corresponding field in the per-thread data* structure */#ifdef _MTptd->_token = str;#else /* _MT */nextoken = str;#endif /* _MT *//* Determine if a token has been found. */if ( string == str )return NULL;elsereturn string;}11 / 11。