C语言截取指定长度字符串

时间:2023-01-12 08:30:38

/*  
 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;  
 }