您的位置:首页 > 编程语言 > C语言/C++

学习笔记——strlen、strcpy、memcpy的c语言实现,不调用库函数

2010-10-18 01:05 726 查看
/*
*Magicman
*myStrcpy.c
*不用库函数,实现字符串拷贝函数(strcpy)
*/
#include <stdio.h>
#include <assert.h>

char *myStrcpy( char *strDest, const char *strSrc )
{
//对源地址和目的地址加非0 断言
assert( (strDest != NULL) && (strSrc != NULL) );

//为了实现链式操作,将目的地址返回
char *address = strDest;

//循环,拷贝字符串
while( (*strDest++ = *strSrc++) != '/0' );

return address;
}

int main(int argc, char argv[])
{
char str1[] = "Test myStrcpy!";
char str2[20] = "";
char *p = NULL;

myStrcpy(str2, str1);

printf(str2);

printf("/n");

myStrcpy(p,str1);

return 0;
}

/*
*Magicman
*myStrlen
*不用库函数,求一个字符串的长度
*/
#include <stdio.h>
#include <assert.h>

int myStrlen(const char *str)
{
assert(str != NULL); //断言

int len = 0;

while (*str++ != '/0')
{
len++;
}

return len;
}

int main(int argc, char *argv[])
{
char str1[] = "Testing myStrlen!";

printf("str1 = %s/n", str1);

printf("len = %d/n", myStrlen(str1));

return 0;
}

/*
*Magicman
*myMemcpy.c
*不调用库函数,实现内存拷贝
*/

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

void *myMemcpy(void *dest, const void *src, int len)
{
assert((dest != NULL) && (src != NULL) && (len >= 0));

if (dest == src)
{
return dest;
}

while (len-- > 0)
{
*(char *)dest++ = *(char *)src++;
}

return dest;
}

int main(int argc, char argv[])
{
char str[20] = "Testing myMemory!";
char pstr[20] = "";
char *pp = str;
int ia[10] = {1,2,3,4,5,6,7,8,9,10};
int ib[10] = {};
int *ip = NULL;

myMemcpy((void *)pstr, (void *)str, sizeof(str));

printf("%s/n", pstr);

printf("%s/n", myMemcpy((void *)pp, (void *)str, 20));

myMemcpy((void *)ib, (void *)ia, 5*sizeof(int));

for (ip = ib; ip < ib + 10; ip++)
{
printf("%d ", *ip);
}

printf("/n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐