C字符串函數底層實現.doc_第1頁
C字符串函數底層實現.doc_第2頁
C字符串函數底層實現.doc_第3頁
C字符串函數底層實現.doc_第4頁
C字符串函數底層實現.doc_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C字符串函數底層實現1 /*2 * linux/lib/string.c3 *4 * Copyright (C) 1991, 1992 Linus Torvalds5 */6 7 /*8 * stupid library routines. The optimized versions should generally be found9 * as inline code in 10 *11 * These are buggy as well.12 */13 14 #include 15 16 char * _strtok = NULL;17 18 char * strcpy(char * dest,const char *src)19 20 char *tmp = dest;21 22 while (*dest+ = *src+) != 0)23 /* nothing */;24 return tmp;25 26 27 char * strncpy(char * dest,const char *src,size_t count)28 29 char *tmp = dest;30 31 while (count- & (*dest+ = *src+) != 0)32 /* nothing */;33 34 return tmp;35 36 37 char * strcat(char * dest, const char * src)38 39 char *tmp = dest;40 41 while (*dest)42 dest+;43 while (*dest+ = *src+) != 0)44 ;45 46 return tmp;47 48 49 char * strncat(char *dest, const char *src, size_t count)50 51 char *tmp = dest;52 53 if (count) 54 while (*dest)55 dest+;56 while (*dest+ = *src+) 57 if (-count = 0)58 break;59 60 61 62 return tmp;63 64 65 int strcmp(const char * cs,const char * ct)66 67 register signed char _res;68 69 while (1) 70 if (_res = *cs - *ct+) != 0 | !*cs+)71 break;72 73 74 return _res;75 76 77 int strncmp(const char * cs,const char * ct,size_t count)78 79 register signed char _res = 0;80 81 while (count) 82 if (_res = *cs - *ct+) != 0 | !*cs+)83 break;84 count-;85 86 87 return _res;88 89 90 char * strchr(const char * s,char c)91 92 for(; *s != c; +s)93 if (*s = 0)94 return NULL;95 return (char *) s;96 97 98 size_t strlen(const char * s)99 100 const char *sc;101 102 for (sc = s; *sc != 0; +sc)103 /* nothing */;104 return sc - s;105 106 107 size_t strnlen(const char * s, size_t count)108 109 const char *sc;110 111 for (sc = s; *sc != 0 & count-; +sc)112 /* nothing */;113 return sc - s;114 115 116 size_t strspn(const char *s, const char *accept)117 118 const char *p;119 const char *a;120 size_t count = 0;121 122 for (p = s; *p != 0; +p) 123 for (a = accept; *a != 0; +a) 124 if (*p = *a)125 break;126 127 if (*a = 0)128 return count;129 +count;130 131 132 return count;133 134 135 char * strpbrk(const char * cs,const char * ct)136 137 const char *sc1,*sc2;138 139 for( sc1 = cs; *sc1 != 0; +sc1) 140 for( sc2 = ct; *sc2 != 0; +sc2) 141 if (*sc1 = *sc2)142 return (char *) sc1;143 144 145 return NULL;146 147 148 char * strtok(char * s,const char * ct)149 150 char *sbegin, *send;151 152 sbegin = s ? s : _strtok;153 if (!sbegin) 154 return NULL;155 156 sbegin += strspn(sbegin,ct);157 if (*sbegin = 0) 158 _strtok = NULL;159 return( NULL );160 161 send = strpbrk( sbegin, ct);162 if (send & *send != 0)163 *send+ = 0;164 _strtok = send;165 return (sbegin);166 167 168 void * memset(void * s,char c,size_t count)169 170 char *xs = (char *) s;171 172 while (count-)173 *xs+ = c;174 175 return s;176 177 178 char * bcopy(const char * src, char * dest, int count)179 180 char *tmp = dest;181 182 while (count-)183 *tmp+ = *src+;184 185 return dest;186 187 188 void * memcpy(void * dest,const void *src,size_t count)189 190 char *tmp = (char *) dest, *s = (char *) src;191 192 while (count-)193 *tmp+ = *s+;194 195 return dest;196 197 198 void * memmove(void * dest,const void *src,size_t count)199 200 char *tmp, *s;201 202 if (dest = src) 203 tmp = (char *) dest;204 s = (char *) src;205 while (count-)206 *tmp+ = *s+;207 208 else 209 tmp = (char *) dest + count;210 s = (char *) src + count;211 while (count-)212 *-tmp = *-s;213 214 215 return dest;216 217 218 int memcmp(const void * cs,const void * ct,size_t count)219 220 const unsigned char *su1, *su2;221 signed char res = 0;222 223 for( su1 = cs, su2 = ct; 0 count; +su1, +su2, count-)224 if (res = *su1 - *su2) != 0)225 break;226 return res;227 228 229 /*230 * find the first occurrence of byte c, or 1 past the area if none231 */232 void * memscan(vo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論