C语言--字符串的截取

        今天碰到了一个字符串截取的功能实现问题,比较常见所以就做下记录。

一般的实现是这样的:

#include <stdio.h>
#include <string.h>

int main(void){
  char dest[5]={0};
  char src[]="abcdefghijk";

  strncpy(dest,src,4);//注意一下这里假如改为5的话,可能会出现
                      //内存越界使得dest可能会占用其它模块的内存,从而导致错误发生;
  //strncpy(dest,src+5,4);//从第5个字符开始截取;
  printf("dest: %s\n",dest);
return 0;
}

引申一下从左边开始截取n个字符:

static char* left(char *dest,const char *src ,int n){
char *p=dest;
char *q=src;
int len=strlen(src);

if(n>len){
  n=len;
}
while(n--) *(p++)=*(q++);
*(p++)='\0';

return dest;
} 

从右边开始截取n个字符:

static char* light(char *dest,const char *src ,int n){
char *p=dest;
char *q=src;
int len=strlen(src);

if(n>len){
  n=len;
}
//int start=len-n;
//q=q+start;
q+=len-n;
while(n--) *(p++)=*(q++);
*(p++)='\0';
return dest;
} 

从中间某处截取一定长度的的子字符串:

static char* cut_substr(char *dest,const char *src ,char start,int n){
char *p=dest;
char *q=src;
chsr *temp=NULL;
int len=strlen(src);

if(start>=len || start<0){
  return NULL;
}
temp=q+start;
if(n>strlen(temp)){//注意这里,截取长度如果超过了src剩余的长度则只截取到src的最后,以避免内存越界;
   n=strlen(temp);
}
q+=start;
while(n--) *(p++)=*(q++);
*(p++)='\0';
return dest;
} 

以上方法基本上用指针来实现,但平时可以使用库函数来实现字符串的操作;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值