China Open source community
站内导航:

 
 
 
当前位置: 首页 >> 程序设计 >> 看一个标准的库函数是怎么写的
 

看一个标准的库函数是怎么写的

作者:      来源:     发表时间:2006-04-10     浏览次数:      字号:    

中国源码网内相关主题链接
  • Linux C中库函数和系统调用的...
  • char * strcpy( char *strDest, const char *strSrc ) 
    {
        assert( (strDest != NULL) && (strSrc != NULL) );
        char *address = strDest; 
        while( (*strDest++ = * strSrc++) != ‘\0’ )
               ;
        return address;
    }
    注意的地方:
    1,const char *strSrc  因为strSrc是输入参数,不能被修改。
    2,assert的使用。头文件加上include<assert.h>。对源地址和目的地址加非0断言,加强程序的健壮性。如果strDest 或者strSrc为空指针,那么系统会提示:Assertion failed,并指出出错位置。
    3,用了一个变量address。是为了实现链式操作,将目的地址返回。比如strcpy( s,strcpy(t,a) );把a的内容复制给t,再把t的内容复制给s。
    4,while( (*strDest++ = * strSrc++) != ‘\0’ )。根据优先级,先把strSrc所指内存的值赋值到strDest所指的内存中,然后strSrc指向下一块内存,strDest也一样。直到遇到'\0'为止。此时,*strDest和*strSrc的值都为'\0'。


    我自己写了一个程序,用来验证这个函数。但却犯了一个错误。后来看了一下自己以前的笔记才发现错误的原因。贴出来,看你能看到错误在哪里吗?
    #include<stdio.h>
    #include<assert.h>

    char *strcopy(char *strDest, const char *strSrc);

    main()
    {
     char *s = "moonbingbing";
     char *t = "wenming";
     
     strcopy(s,t);
     printf("%s\n%s\n",s,t);
     return 0;
    }

    char *strcopy(char *strDest, const char *strSrc) 
    {
        assert( (strDest != NULL) && (strSrc != NULL) );
        char *address = strDest; 
        while( (*strDest++ = * strSrc++) != '\0' )
               ;
        return address;
    }


    错就错在char *s = "moonbingbing";char *t = "wenming";
    因为在ANSI C中,指针p 指向的字符串是当作常量来处理的。如果你的编译器是tc2.0 ,tc++3.0 ,wintc,那么编译器不会报错。从这个程序可以看出,写一个程序不难,但写好就容易了。这些库函数都是高手们写的,要考虑健壮性,安全性,扩展性。这就是高手和和一般人的区别了。
    这些东西在林锐的书上见过,有一段时间没温习c语言了。看一遍就有一些新的收获,温故而知新啊。所以记下来,别再忘了。

    编辑 webmaster

     
     
     
    评论
     
     
    发表
     
    姓名: QQ:
    性别: MSN:
    E-mail: 主页:
    评分: 1 2 3 4 5
    评论内容:
    验证码:
      
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •  
    中国源码网 - WWW.YUANMA.ORG - 中国开放源代码社区