您的位置:首页 > 其它

strncmp、strncpy、strncat、strlen库函数的实现

2013-09-07 20:58 344 查看
1 #include <unistd.h>

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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: