zoukankan      html  css  js  c++  java
  • memcpy函数、memset()函数、strcpy函数、strncpy函数、strcmp函数

    一、函数说明

    1、memcpy函数

    原型:

    void *memcpy(void *dst, const void *src, size_t count)
    {
        void *ret = dst;
        while(count --)
        {
            *(char*)dst = *(char*)src;
            dst = (char*)dst + 1;
            src = (char*)src + 1;
        }
        return ret;
    }

    功能:

      函数memcpy从s2指向的对象中复制n个字符到s1指向的对象中。

    说明:

      如果复制发生在两个重叠的对象中,则这种行为未定义。

    返回值:

    函数memcpy返回s1的值。

     2、memset()函数

    原型:

    void * memset(void * s,int c,size_t count)
    {
        char *xs = (char *) s;
        while (count--)
            *xs++ = c;
        return s;
    }

    功能:

       Memset 用来对一段内存空间全部设置为某个字符。

    说明:

      一般用在对定义的字符串进行初始化为‘ ’或‘/0’如:原型是memset(buffer, 0, sizeof(buffer))。

      buffer:为指针或是数组, c:是赋给buffer的值,count:是buffer的长度。

    返回值:

    3、memcmp函数

    原型:

    int memcmp(const void * cs,const void * ct,size_t count)
    {
        const unsigned char *su1, *su2;
        int res = 0;
        for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
            if ((res = *su1 - *su2) != 0)
                break;
        return res;
    }

    3、strcpy函数

     原型: 

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

    功能:

      函数strcpy把s1指向的串(包括空字符)复制到s2指向的数组中。

    说明:

      如果复制发生在两个重叠的对象中,则这种行为未定义。

    返回值:

      函数strcpy返回s2的值。

    4、strncpy函数

      char  *strncpy(char *s2, const char *s1, size_t n);

    功能:

      函数strncpy从s1指向的数组中最多复制n个字符(不复制空字符后面的字符)到s2指向的数组中。

    说明:

      如果复制发生在两个重叠的对象中,则这种行为未定义。

      如果s1指向的数组是一个比n短的字符串,则在s2定义的数组后面补空字符,直到写入了n个字符。

    返回值:

      函数strncpy返回s2的值。

    5、strcmp()函数

      extern int strcmp(const char s1,const char s2);

    功能:

      比较字符串s1和s2.

    说明:

    • 当s1 < s2时,返回值<0
    • 当s1 = s2时,返回值=0
    • 当s1 > s2时,返回值>0

     返回值:

    二、注意事项

    strcpy 是依据 “” 作为结束判断的,如果 s2 的空间不够,则会引起 buffer overflow。

    memcpy用来在内存中复制数据,由于字符串是以“”结尾的,所以对于在数据中包含“”的数据只能用memcpy,如:"helloworld"。

    Strncpy和memcpy很相似,只不过它在一个终止的空字符处停止。当n>strlen(s1)时,给s2不够数的空间里填充“”;当n<=strlen(s1)时,s2是没有结束符“”的。

    这里隐藏了一个事实,就是s2指向的内存一定会被写n个字符。

    所以总的来说注意:

    1、s2指向的空间要足够拷贝;使用strcpy时,s2指向的空间要大于等于s1指向的空间;使用strncpy或memcpy时,s2指向的空间要大于或等于n。

    2、使用strncpy或memcpy时,n应该大于strlen(s1),或者说最好n >= strlen(s1)+1;这个1 就是最后的“”。

    3、使用strncpy时,确保s2的最后一个字符是“”。

    三、总结

    1、memset主要应用是初始化某个内存空间。

    2、memcpy是用于copy源空间的数据到目的空间中。

    3、strcpy用于字符串copy,遇到‘/0’,将结束。

  • 相关阅读:
    SharePoint 2013 安装.NET Framework 3.5 报错
    SharePoint 2016 配置工作流环境
    SharePoint 2016 站点注册工作流服务报错
    Work Management Service application in SharePoint 2016
    SharePoint 2016 安装 Cumulative Update for Service Bus 1.0 (KB2799752)报错
    SharePoint 2016 工作流报错“没有适用于此应用程序的地址”
    SharePoint 2016 工作流报错“未安装应用程序管理共享服务代理”
    SharePoint JavaScript API in application pages
    SharePoint 2016 每天预热脚本介绍
    SharePoint 无法删除搜索服务应用程序
  • 原文地址:https://www.cnblogs.com/studysoftware/p/10856908.html
Copyright © 2011-2022 走看看