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

📄 ssplit.c

📁 一个不错的服务代理器
💻 C
字号:
char *ssplit_rcs = "$Id: ssplit.c,v 1.6 1998/10/27 16:25:07 ACJC Exp $";/* Written and copyright 1997 Anonymous Coders and Junkbusters Corporation. * Distributed under the GNU General Public License; see the README file. * This code comes with NO WARRANTY. http://www.junkbusters.com/ht/en/gpl.html *//* ssplit() - split a string (in-place) into fields *      s = string to split *      c = list of characters to be used as field separators *          (if NULL, use default separators of space, tab, and newline) * *      v = vector into which field pointers are placed *      n = number of fields in vector * *      m = flag indicating whether to treat strings of field *          separators as indicating multiple fields * *      l = flag indicating whether to ignore leading field separators */#include <string.h>int ssplit(char *s, char *c, char *v[], int n, int m, int l){    char t[256];    char **x = NULL;    int xsize = 0;    unsigned char *p, b;    int xi = 0;    int vi = 0;    int i;    int last_was_null;    if (!s)	return (-1);    memset(t, '\0', sizeof(t));    p = (unsigned char *) c;    if (!p)	p = (unsigned char *) " \t";	/* default field separators */    while (*p)	t[*p++] = 1;	/* separator  */    t['\0'] = 2;	/* terminator */    t['\n'] = 2;	/* terminator */    p = (unsigned char *) s;    if(l) {	/* are we to skip leading separators ? */    	while((b = t[*p]) != 2) {		if(b != 1) break;		p++;	}    }    xsize = 256;    x = (char **) zalloc((xsize) * sizeof(char *));    x[xi++] = (char *) p;	/* first pointer is the beginning of string */    /* first pass:  save pointers to the field separators */    while((b = t[*p]) != 2) {    	if(b == 1) {		/* if the char is a separator ... */		*p++    = '\0';	/* null terminate the substring */		if(xi == xsize) {			/* get another chunk */			int new_xsize = xsize + 256;			char **new_x = (char **)				zalloc((new_xsize) * sizeof(char *));			for(i=0; i < xsize; i++) new_x[i] = x[i];			free(x);			xsize = new_xsize;			x     = new_x;		}		x[xi++] = (char *) p;	/* save pointer to beginning of next string */	} else {		p++;	}    }    *p = '\0';		/* null terminate the substring */#ifdef DEBUGprint(x, xi); /* debugging */#endif    /* second pass: copy the relevant pointers to the output vector */    last_was_null = 0;    for(i=0 ; i < xi; i++) {	if(m) {		/* there are NO null fields */		if(*x[i] == 0) continue;	}	if(vi < n) {		v[vi++] = x[i];	} else {		free(x);		return(-1);	/* overflow */	}    }    free(x);#ifdef DEBUGprint(v, vi); /* debugging  */#endif    return (vi);}#ifdef DEBUGprint(char **v, int n){	int i;	printf("dump %d strings\n", n);	for(i=0; i < n; i++) {		printf("%d '%s'\n", i, v[i]);	}}#endif

⌨️ 快捷键说明

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