strlen,strcpy,strcat,strcmp四个函数的原型,memcpy,memset的实现

来源:互联网 发布:日本拉面的做法知乎 编辑:程序博客网 时间:2024/05/17 15:04

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int strcmp(char *str1,char *str2)
{
 assert(str1!=0 && str2!=0);
 while(*str1 && *str2 && *str1==*str2)
 {
  str1++;
  str2++;
 }
 return *str1-*str2;
}
int strlen(char *str)
{
 int len=0;
 while(*str != '\0')
 {
  str++;
  len++;
 }
 return len;
}
char *strcpy(char *new_str,char *old_str)
{
 char *temp=new_str;
 assert(old_str != NULL && new_str !=NULL);
 while(*old_str != '\0')
 {
  *temp=*old_str;
  old_str++;
  temp++;
 }
 *temp='\0';
 return new_str;
}

-------------------------------------------------------------------------------------------

一种更简单的描述

char *strcpy(char *new_str,char *old_str)

{
   assert((new_str != NULL) && (old_str !=NULL));

   char *temp=new_str;

  while((*temp++ = *old_str++) != NULL)

continue;

return new_str;

}

----------------------------------------------------------------------------------------
char *strcat(char *str1,char *str2)
{
 assert(str1 !=NULL && str2 != NULL);
 char *temp=str1;
 while(*temp != 0)
 {
  temp++;
 }
 while(*str2 != 0)
 {
  *temp++=*str2++;
 }
 *temp='\0';
 return str1;
}
void main()
{
 int res,str_length;
 char string1[]="abcd";
 char string2[]="abc";
 char *new_str=(char *)malloc(sizeof(char));
    new_str=strcpy(new_str,string1);
 res=strcmp(string1,string2);
 str_length=strlen(string1);
 printf("%d\n",res);
 printf("%d\n",str_length);
 printf("%s\n",new_str);
 printf("%s\n",strcat(string1,string2));
}

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void *memcpy(void *dest,const void *src,int n)从源src所指的内存地址的起始位置拷贝N个字节到dest所指内存地址的起始位置

void main()

{

char *s="hello,world!";

char str[20];

memcpy(str,s,5);

str[5]='\0';

printf("%s\n",str);

}

 

void *memset(void *s, int ch, size_t n);    函数解释:将s中前n个字节替换为ch并返回s;

void main()
{
 char str[5];
 memset(str,'1',5);
 for(int i=0;i<5;i++)
 {
  printf("%c\n",str[i]);
 }
}

注意这里是'1',而不是1,如果是1就有问题,memset函数是以字节为单位来赋值的。

 

原创粉丝点击