/*
destin : 返回字符串。
source : 源字符串。
start : 开始截取的位置。(取值从0开始,保持C字符串的特点;若start为负数,则表示从右往左截取。)
maxlen : 截取的长度。(长度超过字符串的长度,按字符串实际长度计算。)
*/
char *substring(char *destin, char *source, int start, int maxlen)
{
char *p;
char *address;
int n = 0; /*字符串的长度*/
int oldstart;
int i;
assert((destin!=NULL) && (source !=NULL));
address = destin;
/*求字符串长度*/
p = source;
while (*p++ != '/0')
{
n++;
}
/*若start为负数,则从后往前*/
if(start < 0)
{
/*如果开始的位置超过字符串长度,则不进行截取*/
if(-start > n-1)
{
return NULL;
}
oldstart = start;
start = n + start-maxlen+1;
if(start < 0)
{
start = 0;
maxlen += oldstart;
}
}
/*如果开始的位置超过字符串长度,则不进行截取*/
if(start > n-1)
{
return NULL;
}
if(start+maxlen > n)
{
maxlen = n - start;
}
for(i=0, p = source; i<maxlen; i++)
{
*destin++ = *(p+(start++));
}
*destin = '/0';
return address;
}