您的位置:首页 > 教育 > 锐评 > 教育网站官网_招聘免费发布平台_企业网络推广技巧_站内营销推广途径

教育网站官网_招聘免费发布平台_企业网络推广技巧_站内营销推广途径

2024/10/5 17:40:56 来源:https://blog.csdn.net/qq_43855258/article/details/142500958  浏览:    关键词:教育网站官网_招聘免费发布平台_企业网络推广技巧_站内营销推广途径
教育网站官网_招聘免费发布平台_企业网络推广技巧_站内营销推广途径

strcpy

char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* my_strcpy(char *dst, char *src)
{if(dst == NULL || src == NULL){return NULL;}char *ret = dst;while((*dst++ = *src++) != '\0');return ret;
}int main()
{char src[10];scanf("%s", &src);char *dst = malloc(sizeof(src));dst = my_strcpy(dst, src);printf("%s", dst);
}

mempcy

- 增加内存重叠检测,避免dst与src重叠时(即dst>=src && dst <= src+strlen(src)),src的尾'\0'被覆盖,报错。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* my_memcpy(char *dst, const char* src, int num)
{if(dst == NULL || src == NULL) return NULL;char *ret = dst;// dst 与 src 内存重叠 : 从高地址开始复制if(dst >= src && dst <= src + num){dst = dst + num - 1;src = src + num - 1;while(num--){*dst-- = *src--;}}// dst 与 src 无内存重叠 : 从地址开始复制else{while(num--){*dst++ = *src++;	}}return ret;
}char* my_strcpy(char *dst, const char *src)
{if(dst == NULL || src == NULL){return NULL;}return my_memcpy(dst, src, strlen(src)+1);
}int main()
{char src[3];scanf("%s", &src);my_strcpy(src+1, src);printf("%s", src);
}

- void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void* my_memcpy(void *dst, const void* src, size_t num)
{if(dst == NULL || src == NULL) return NULL;void *ret = dst;// dst 与 src 内存重叠 : 从高地址开始复制if(dst > src && (char*)dst < (char*)src + num){dst = (char*)dst + num - 1;src = (char*)src + num - 1;while(num--){*(char*)dst-- = *(char*)src--;}}// dst 与 src 无内存重叠 : 从地址开始复制else{dst = (char*)dst;src = (char*)src;while(num--){*(char*)dst++ = *(char*)src++;	}}return ret;
}char* my_strcpy(char *dst, const char *src)
{if(dst == NULL || src == NULL){return NULL;}return my_memcpy(dst, src, strlen(src)+1);
}int main()
{/*char src[3];scanf("%s", &src);my_strcpy(src+1, src);printf("%s", src);*/int src[3];for(int i=0; i<3; i++){scanf("%d", &src[i]);	}my_memcpy(src+1, src, sizeof(int)*2);for(int i=0; i<3; i++){printf("%d ", src[i]);}}

 strcat

 char *strcat(char *dest, const char *src) 把 src 所指的字符串追加到 dest 所指向的字符串的结尾 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* strcat(char* dst, const char* src)
{if(dst == NULL || src == NULL) return NULL;//char *ret = dst;while(*dst != '\0'){dst++;}while((*dst++ = *src++) != '\0');return ret;
}int main()
{char src[3];fgets(src, 3, stdin);//scanf("%s",&src);char dst[12] = "capybara_";printf("%s", strcat(dst, src));
}

strlen

#include <stdio.h>
#include <assert.h>
size_t my_strlen(char *str)
{if(str == NULL) return 0;//assert(str != NULL);size_t res = 0;while(*str != '\0'){res++;str++;}return res;
}
int main()
{/*  Write C code in this online editor and run it. */printf("Hello, World! \n");//char *str = "hi";char *str=NULL;printf("%d",my_strlen(str));return 0;
}

strcmp

 int strcmp(const char *str1, const char *str2) 按字典序比较字符串str1,str2

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。
#include <stdio.h>
#include <assert.h>int my_strcmp(const char *str1, const char *str2)
{assert(str1 != NULL && str2 != NULL);while( *str1  && *str2 ){if(*str1 != *str2){break;}str1++;str2++;}return *str1 - *str2;
}int main()
{/*  Write C code in this online editor and run it. */printf("Hello, World! \n");char *str1 = "hi";char *str2 = "hii";printf("%d", my_strcmp(str1, str2));return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com