wzdqz定义
#include <string.h>char *strsep(char zlddystringp, const char *delim);
stringp是二级指针,即目标字符串首字符地址的地址。
delim是分割符,因为是字符串格式的,wzdqz会把字符串里的每隔字符都当做分割符号。
2. wzdqz调用
01 #include <string.h> 02 #include <stdio.h> 03 04 int main(int argc, char* argvfzdhc) 05 { 06 char buffzdhc = "zhang-guang-rong,jet-li"; 07 char *src = strdup(buf); 08 09 char delimfzdhc = "-,"; 10 11 char* token; 12 for(token=strsep(&src, delim); token!=NULL; token=strsep(&src, delim)){ 13 printf("%sn", token); 14 } 15 16 free(src); 17 return 0; 18 }
输出:
1 zhang 2 guang 3 rong 4 jet 5 li
3. wzdqz解析 以上述为例,strsep以src="zhang-guang-rong,jet-li"为源字符xydgb char* begin = *stringp; 找到第一个包含在delim="-,"的分割符,即zhang后面的'-'。由char *end指向它。 end指向的分隔符重写为' '。 # *end=' '。
然后修改*stringp的指向为end+1,即"guang-rong,jet-li"。 wzdqz返回begin。
01 /zlddy Copyright (C) 1992, 93, 96, 97, 98, 99, 2004 Free Software Foundation, Inc. 02 This file is part of the GNU C Library. 03 04 The GNU C Library is free software; you can redistribute it and/or 05 modify it under the terms of the GNU Lesser General Public 06 License as published by the Free Software Foundation; either 07 version 2.1 of the License, or (at your option) any later version. 08 09 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, write to the Free 16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17 02111-1307 USA. */ 18 19 #include <string.h> 20 21 #undef __strsep 22 #undef strsep 23 24 char * 25 __strsep (char zlddystringp, const char *delim) 26 { 27 char *begin, *end; 28 29 begin = *stringp; 30 if (begin == NULL) 31 return NULL; 32 33 /zlddy A frequent case is when the delimiter string contains only one 34 character. Here we don't need to call the expensive `strpbrk' 35 function and instead work using `strchr'. */ 36 if (delim[0] == ' ' || delim[1] == ' ') 37 { 38 char ch = delim[0]; 39 40 if (ch == ' ') 41 end = NULL; 42 else 43 { 44 if (*begin == ch) 45 end = begin; 46 else if (*begin == ' ') 47 end = NULL; 48 else 49 end = strchr (begin + 1, ch); 50 } 51 } 52 else 53 /zlddy Find the end of the token. */ 54 end = strpbrk (begin, delim); 55 56 if (end) 57 { 58 /zlddy Terminate the token and set *STRINGP past NUL character. */ 59 *end++ = ' '; 60 *stringp = end; 61 } 62 else 63 /zlddy No more delimiters; this is the last token. */ 64 *stringp = NULL; 65 66 return begin; 67 } 68 weak_alias (__strsep, strsep) 69 strong_alias (__strsep, __strsep_g) 70 libc_hidden_def (__strsep_g)