C/C++知识点之C语言常用库函数实现
小标 2018-09-18 来源 : 阅读 1180 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言常用库函数实现,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言常用库函数实现,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

1.memcpy函数
memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制拷贝的字节数;
函数原型:void *memcpy(void *dest, void *src, unsigned int count);
用法:可以拷贝任何类型的对象,因为函数的参数类型是void*(未定义类型指针),也就是说传进去的实参可以是int*,short*,char*等等,但是由于函数拷贝的过程是一个字节一个字节的拷贝的,所以实际操作的时候要把void*强制转化为char*,这样在指针加的时候才会保证每次加一个字节;

#include 
#include 
#include 

using namespace std;

/********memcpy()函数原型为:void* memcpy(void* dest, void* src, size_t n); 返回指向dest的空类型指针*********/
//返回void* 类型的原因,是为了使用链式表达,即strlen((char*)(memcpy(dest,src,n)),这样可以直接计算dest的长度,是程序代码更简洁
/****注意void* 指针的使用,即该函数允许传入任何类型的指针数据****/
void* memcpy(void *dest, void *src, size_t n)
{
    assert((dest != NULL) && (src != NULL));
    char *dest_t = (char*)dest;                  //转换成字符型一个个复制拷贝,由于函数拷贝的过程是一个字节一个字节的拷贝的,
                                                 //所以实际操作的时候要把void*强制转化为char*,
    char *src_f = (char*)src;                    //这样在指针加的时候才会保证每次加一个字节
    while (n-- > 0)
    {
        *(dest_t++) = *(src_f++);
    }
    return dest;//void* 一定要返回一个值(指针),这个和void不太一样!函数返回指向dest的指针

}

int main()
{
    int a[5] = { 0, 1, 2 };
    int *b = new int[3];
    void *c = memcpy(b, a, 3 * sizeof(int));  //sizeof()可以用类型做参数,也可以传入实际的变量
    for (int i = 0; i < 3; i++)            //数组做参数时,不退化为指针,统计的是数组整体占据的内存
    {
        cout << b[i] << endl;
    }
    int *temp = (int*)c;
    temp++;
    cout << endl;
    cout << *temp << endl;
    return 0;
}

注1:与strcpy相比,memcpy并不是遇到‘\0‘就结束,而是一定会拷贝完n个字节。
    2:如果目标数组dest本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。

//memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;

  char a[100], b[50];

  memcpy(b, a,sizeof(b)); //注意如用sizeof(a),会造成b的内存地址溢出。

  strcpy就只能拷贝字符串了,它遇到‘\0‘就结束拷贝;例:

  char a[100], b[50];

      strcpy(a,b);

2.strcpy函数

#include 
#include 

using namespace std;

/********strcpy()函数原型为:char *strcpy(char* dest, const char *src); 返回指向dest的指针*********/
//返回char* 类型的原因,是为了使用链式表达,即strlen(strcpy(dest,src)),这样可以直接计算dest的长度,是程序代码更简洁

char* strcpy(char *dest, char *src)
{
    if(dest == NULL || src == NULL)
        return NULL;
    char *res = dest;//保存原始dst的首地址
    while(*src != ‘\0‘)
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = ‘\0‘;
    return res;
}

int main()
{
    char *src = "hello world";
    char *dest = new char;
    //strcpy(dest,src);
    int len = strlen(strcpy(dest,src));
    cout << len << endl;
    cout << dest << endl;
    return 0;
}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程