C语言源字符串首地址,C语言中一些有关于字符串的库函数 ( 源函数 )

strlen  计算字符串大小

// 计数器方法

int my_strlen(const char * str)

{

int count = 0;

while(*str)

{

count++;

str++;

}

return count;

}

//不创建临时变量

int my_strlen(const char * str)

{

if(*str == '\0')

return 0;

else

return 1+my_strlen(str+1);

}

//指针-指针的方式

int my_strlen(char *s)

{

char *p = s;

while(*p !='\0')

p++;

return p-s;

}

strcpy   从src地址开始且含有'\0'结束符的字符串复制到以dst开始的地址空间,返回值的类型为char*。

char *my_strcpy(char *dest, const char*src)

{

char *ret = dest;

assert(dest != NULL);

assert(src != NULL);

while((*dest++ = *src++))

;

return ret;

}

strcat  将两个字符连接起来

char *my_strcat(char *dest, const char *src)

{

char *ret=dest;

assert(dest);

assert(src);

while(*dest)

{

dest++;

}

while((*dest++ = *src++))

{

;

}

return ret;

}

strstr 判断str2是否是str1的子串, 如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

char *my_strstr(const char* str1, const char* str2)

{

assert(str1);

assert(str2);

char *cp=(char *)str1;

char *substr=(char *)str2;

if(*str2=='/0')

return NULL;

while(*cp)

{

s1=cp;

substr=str2;

while(*s1&&*substr&&(*s1==*substr))

{

s1++;

substr++;

}

if(*substr=='\0')

return cp;

cp++;

}

}

strcmp  比较字符串的大小  若str1==str2,则返回零;若str1str2,则返回正数。

int my_strcmp(const char * src, const char * dst)

{

int ret=0;

while(!(ret=*(unsighed char *)src-*(unsigned char *)dst)&&*dst)

src++,dst++;

if(ret<0)

ret=-1;

else if(ret>0)

ret=1;

return ret;

}

memcpy  内存拷贝 函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dst所指的内存地址的起始位置中。void * ( 无类型指针, 可以接受任何类型 )   size_t  ( 字节数 )

void * my_memcpy(void * dst, const void *src, size_t count)

{

void * ret=dst;

while(count--) {

//定义字符型,一个字节一个字节进行拷贝

*(char *)dst=*(char *)src;

dst=(char *)dst+1;

src=(char *)src+1;

}

return ret;

}

memmove   用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

void * my_memmove(void *dst, const void *src, size_t count)

{

void * ret=dst;

//如果目标区域与源区域有重叠的部分,从后往前拷贝,

//若没有重叠的部分,从前往后拷贝

if(dst<=src||(char *)dst >=((char *)src+count)){

while(count--){

*(char *)dst=*(char *)src;

dst=(char *)dst+1;

src=(char *)src+1;

}

}

else{

dst=(char *)dst+count-1;

src=(char *)src+count-1;

while(count--){

*(char *)dst=*(char *)src;

dst=(char *)dst-1;

src=(char *)src-1;

}

}

return ret;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值