2 #include <stdio.h>
3 #include <stdlib.h>
4
5 //字符串比较函数的实现
6 int my_strncmp(const char *s1,const char *s2,size_t n){
7 //判断参数是否给对,避免段错误
8 if(s1==NULL||s2==NULL)printf("param error!\n"),exit(-1);
9 if(*s1==*s2&&--n){//一个一个字符的比较,比较n次
10 s1++;
11 s2++;
12 }
13 if(*s1>*s2)
14 return 1;
15 else if(*s1<*s2)
16 return -1;
17 else
18 return 0;
19
20 }
21
22
23 //字符串复制函数的实现
24 char * my_strncpy(char* des,const char* src,size_t n){
25 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
26 else{
27 char *tmp=des;
28 int i=n;
29 while(n--&&(*tmp++=*src++)!='\0'/*&&--n*/){};//此处"--"放在n前面则会少复制一个字符,如果放在后面则可以
30 *tmp='\0';
31 return des;
32 }
33 }
34 //字符串拼接函数的实现
35 char *my_strncat(char *des, const char *src, size_t n){
36 if(des==NULL||src==NULL)printf("param error!\n"),exit(-1);
37 char *tmp = des;
38 if (n) {
39 //先移到des字符串的最后一个字符
40 while (*tmp)
41 tmp++;
42 //从最后一个字符开始赋值
43 while ((*tmp++ = *src++) != 0) {
44 if (--n == 0) {
45 *tmp = '\0';
46 break;
47 }
48 }
49 }
50 return des;
51 }
52
53 int my_strlen(char *str){
54 int count=0;
55 while(*str++!='\0'){
56 count++;
57 }
58 return count;
59 }
60
61 int main(){
62 char des[36];
63 printf("deslen=%d\n",sizeof(des));
64 char *src="hhahaha";
65 my_strncpy(des,src,5);
66 printf("%s\n",des);
67 src="hpllo world";
68
69 my_strncat(des,src,4);
70 printf("des=%s\n",des);
71 printf("src=%s\n",src);
72
73 int cmp=my_strncmp(des,src,7);
74 printf("cmp=%d\n",cmp);
75
76 int n=my_strlen(src);
77 printf("length=%d\n",n);
78
79 }