由strcpy和memcpy, memmove想到的 C/C++ 标准库

 strcpy和memcpy的区别只要在于两点:

1,memcpy要指定需要拷贝的字节数量

2,strcpy按照c-style字符串的方式来拷贝,也就是意味着他在碰到\0的时候会自动终止,而memcpy不会,他会原封不动的拷贝数据。

memcpy和memmove的区别主要在于,memmove能够正确处理起始地址和结束地址重合的情况,而memcpy不能,例子如下:

#include <iostream>
using namespace std;

main()
{
    char bufa[10];
    char bufb[10];
    strcpy(bufa,"0123456789");
    strcpy(bufb,"0123456789");

    memcpy(bufa+4,bufa,6);
    memmove(bufb+4,bufb,6);

    cout<<bufa<<endl;
    cout<<bufb<<endl;

    printf("%X\n",bufa);
    printf("%X\n",bufb);

    for(int i=0;i<10;i++){
        printf("%X",bufa[i]);
    }  
    cout<<endl;
    for(int i=0;i<10;i++){
        printf("%X",bufb[i]);
    }  
    cout<<endl;
}

例子输出的结果是:

0123012301
0123012345
E6E89870
E6E89860

 C++的标准函数库是在C的基础上扩展了标准I/OSTL而得到的。C++标准在继承C++标准的时候,去掉了头文件后面的.h,然后再前面加上了c。

比如:C标准中的<stddef.h>到了C++标准当中就变成了cstddef,引用头文件的时候就由#include <stddef.h> 变成了: #include <cstddef>。

size_t就是在stddef.h中定义的,到了C++中,这个定义就到了cstddef中。

另外,C标准和C++标准都是由下面的库组成的,这些库又有不同的实现,在linux下面最常见的就是glibc,而windows下面最常见的就是Microsoft C Run-time Library

 

原文地址:https://www.cnblogs.com/welkinwalker/p/1951015.html