所有函数都实现了 ,在需要时解放部分屏蔽就好
char* strcat(char* dst, char* src);
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "windows.h"
#include "string.h"
#include "assert.h"
#define OK 1
#define ERROR 0
char* My_strcat(char* dst, char* src)
{
assert(dst && src);
//char* start = dst;//记录提分地址
while (*++dst);//先让dst到达末尾
do
{
*dst++ = *src++;
} while (*src);
return dst;//因为我们帮不需要返回的地址,所以这里返回什么都可以
}
char* My_strchr(char* dst, const char ch)
{
while (*dst )
{
if( *dst == ch)
return dst;
dst++;
}
return NULL;//不存在返回空指针
}
int My_strcmp(const char* dst,const char* src)
{
assert(dst && src);
do{
int ret = *dst - *src;
{
if (ret < 0)
return -1;
else if (ret > 0)
return 1;
else
return 0;
}
}while (*dst && *src);
{
if (!*dst)
return -1;
if (!*src)
return 1;
}
}
int My_strcmp2(char* dst, const char* src)
{
assert(dst && src);
while (*dst++ && *src++)
{
return *dst - *src;
}if (!*dst)
return -1;
if (!*src)
return 1;
return 0;
}
void * My_memcpy(void*dst,void*src,int num)
{
assert(src);
char* p1 = (char*)dst;
char* p2 = (char*)src;
while(num--)
{
*p1++ = *p2++;//就算*src为空也要复制
}
*p1 = '\0';//内存操作程序员自己要在结尾加NUL
return dst;
}
void* My_memmove( void*dst, void*src, int num)
{
assert(dst &&src);
char* p1 = dst; char* p2 = src;
if (p1<p2 && p1 + num>p2)//前重叠
while (num--)
{
*p1++ = *p2++;
}
else //否则都按后重叠复制
//(p1 > p2 && p1 < p2 + num)// 后重叠,
while (num)
{
p1[num--] = p2[num];
}
return dst;
}
int main(void)
{
char ch;
char p[100] = "i'm a good boy";
char a[40] = "Hello,";//要保证目标串足够长
My_strcat(a, p);
printf("连接后的串为:%s\n", a);
printf("请输入要查找的字符,输入’#‘退出查找\n");
//ch = getchar();
/*if (ch != '#')
{
char *p1 = My_strchr(p, ch);
if (p1)
printf("存在%s\n", p1);
else
printf("不存在\n");
}*/
//int ret = My_strcmp(p, a);
//switch (ret)//我就想用switch case//其实并不提倡这里这样用
//{
//case 0:
// printf("一样大\n"); break;
//case 1:
// printf("p大\n"); break;
//case -1:
// printf("a大\n"); break;
//default:
// break;
//}
/*int ret2 = My_strcmp(p,a);
if (ret2 == 0)
printf("一样大\n");
else if (ret2 < 0)
printf("a大\n");
else if (ret2 > 0)
printf("p大\n");*/
//My_memcpy(p,a,10);
//printf("%s\n", p);
My_memmove(p,p+10,2);
printf("%s\n", p);
system("pause");
return 0;
}