几个重要的库函数strpcy\strncpy\memcpy……

来源:互联网 发布:软件编写入门视频 编辑:程序博客网 时间:2024/05/18 17:23
  1. strcpy
    strcpy函数的原型是:
    char * strcpy(char* dest, const char* src)
    strcpy的实现经常要注意的细节是:
    (1)判断地址是否为空,个人感觉可以使用断言
    (2)参数只有两个地址,没有拷贝的长度。拷贝到’\0‘时就会终止,要保证最终dest末尾是’\0’。
    (3)要保证目标字串的长度足够,能够容纳原串的长度。
    (4)因为拷贝是dest会移动,而最终要返回的是拷贝后字符串的起始地址,因此要先保存dest的地址,便于最终返回。
    在实现这一点时,有两种方法。 char* temp=dest; 拷贝时移动dest返回temp,或者拷贝时移动temp返回dest,不知道哪个是对的。感觉两个都是没有问题的。

  2. strncpy
    strncpy的功能和strcpy相似,只是它复制时多了一个终止条件。即是未遇到原串的’\0’,如果已经复制了n个字符(n为提供的参数长度),复制同样会终止。
    strcpy的实现要注意的细节也基本适用于strncpy的实现。

  3. memcpy
    memcpy和strncpy有些类似,但也有本质的不同。
    (1)strncpy只能复制字符串,但memcpy对类型没有要求。
    (2)strncpy有两个终止条件,memcpy只有一个终止条件,那就是复制n个字节。(n是memcpy的第三个参数)
    (3)要特别注意目的地址和源地址重合的问题,拷贝前要加以判断。
    (4)实现这个函数时一般要把原来的指针类型转换成char*,这样每次移动都是一个字节。
    实现方式:(考虑了两个地址空间是否会有重叠)
    注意,memcpy是对内存的拷贝,对其他安全性不做考虑。用户在使用这个函数时要小心,比如用它来拷贝字符串(当然如果是字符串拷贝肯定是用strncpy)就要注意末尾的\0字符之类的。
    详见0716代码= =

  4. memset
    memset函数的原型是:
    void *memset(void *s, int ch,size_t n)
    作用是把s所指向的地址开始的n个字节的内容全部置位ch所指定的ASCII值。
    一般经常用memset对某段内存空间置零。
    经常会出现的一个问题:在C++中,为什么不提倡在构造函数中使用:memset(this,0,sizeof(*this))
    原因: 在C++中,如果类中都是基本类型的数据成员并且没有虚函数和虚继承的话,使用memset这样用到没有太多影响。
    如果有虚函数,memset会把虚表指针等全部置零,对类会产生破坏。

5.memcmp
这里写图片描述

1 0
原创粉丝点击