模拟一些库函数

strlen

#include <stdio.h>
int fakestrlen(char* arr)
{
    int c=0;
    while (*arr)
    {
        c++;
        arr++;
    }
    return c;
}

int main(void)
{
    char arr[]="Lorem ipsum dolor sit amet,";
    printf("%d",fakestrlen(arr));
    return 0;
}

strcpy

#include<stdio.h>
#include<assert.h>
char* fakestrcpy(char* targ,const char* arr)
{
    assert(targ!=NULL);
    assert(arr!=NULL);
    char* start=targ;
    while(*targ++=*arr++){;}
    return start;
}
int main(void)
{
    char arr[]="Lorem ipsum";
    char arr2[]="Kalar";
    printf("Before:\narr[]:%s\narr2[]:%s\n\n",arr,arr2);
    fakestrcpy(arr,arr2);
    printf("After:\narr[]:%s\narr2[]:&s\n\n",arr,arr2);
    return 0;
}

strcmp

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int fakestrcmp(const char* strl,const char* str2)
{
    assert(str1 != NULL);
    assert(str2 != NULL);
    while((*str1==*str2)&&(*str1 !=\0'));
    {strl++;str2++;}
    return *strl-*str2;
}
int main()
{
    char* strl = "archive";
    char* str2 = "archives";
    int nums = 0;
    nums=fakestrcmp(strl,str2);
    printf("%d\n",nums);
    system("pause");
    return 0;
}

strcat

#include<stdio.h>
#include<assert.h>

char* fakestrcat(char* arrl,char* arr2)
{
    assert(arr1&&arr2);
    char* nums=arr1;
    while(*arr1!='\0')*arr1++;
    while(*arrl=*arr2){*arrl++;*arr2++;}
    *arrl=*arr2;
    return nums;
}
int main()
{
    char arr1[100]="Java";
    char arr2[]="Script";
    fakestrcat(arrl,arr2);
    printf("%s\n",arr1);
    return 0;
}

strstr

#include<stdio.h>
#include<assert.h>

char* virt_str(const char* str1,const char* str2)
{    
    assert(str1 && str2);
    char* cp = str1;
    char* s1 =cp;
    char* s2 = str2;
    if(*str2 =='\0')    
    {   
        return str1;
    }
    while(*cp)
    {
        s1=cp;   
        s2 = str2;
        while(*s1 && *s2 && *s1 == *s2)
    {    
        s1++;
        s2++;
    }
    if(*s2=='\0')
    {   
        return cp;
    }
    return NULL;
}
int main()
{
    char stra[]="abcddbca";
    char strb[]="ddb";
    printf("%s\n",virt_str(stra,strb));
    return g;
}

strncpy

#include<stdio.h>
char* virt strncpy(char* d,const char* src,size_t c)
{
    char* s=d;
    while(c&&(*d++=*src++)){c--;}
    if(c){while(--c){*d++='\0';}}
    return s;
}
int main()
{
    char stra[]="abcddbca";
    char strb[]="helloworld";
    printf("%s\n",virt_strncpy(stra,strb,7));
    return 0;
}

strncat

#include <stdio.h>
char *Mstrncat(char *str1,const char *str2, size_t n)
{
    if(str1 == NULL || str2 == NULL)
        return 0;
    char *strat =str1;
    while (*str1)
        str1++;
    while((*str1++=*str2++) && n--);
    *str1='\0';
    return strat;
int main()
{
    char str1[100]="String1";
    char str2[]="Str2";
    printf("%s\n",Mstrncat(strl,str2,7));
    return 0;
}

memcpy

#include<stdio.h>
#include<assert.h>

void* memmove_or_cpy(void* dest, const void* src, size_t num)
{
    assert(dest && src);
    void* ret = dest;
    while(num--)
    {
        *(char*)dest=*(char*)src;
        dest=(char*)dest +1;
        src=(char*)src+1;
    }
}
int main()
{
    char stra[]="abcdef";
    char strb[]="bbbb";
    memmove_or_cpy(strb,stra,4);
    printf("%s\n",strb);
    return 0;
}

memmove

#include<stdio.h>
#include<assert.h>
void memmove_or_cpy(void* dest, const void* src, size_t num)
{
	assert(dest && src);
	void* ret= dest;
	if(dest<src)
	{
		while(num--)
		{
			*(char*)dest=*(char*)src;
			dest=(char*)dest +1;
			src=(char*)src +1;
		}
	}
	else
	{
		while(num--)
		{
			*((char*)dest +num)=*((char*)src + num);
		}
	}
	return ret;
}
int main()
{
	int array[]={1,2,3,4,5,6,7,8,9,10};
	memmove_or_cpy(array+3,array,20);
	int i=0;
	for(i=0;i<10;i++){
	printf("%d ",array[i]);}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值