C/C++中memset,memcpy的使用及fill对数组的操作

对数组的整体赋值,以及两个数组间的复制容易出错,这里使用string头文件中的memset和memcpy进行

不必遍历数组,速度快。

之前没有头文件,显示decla

头文件:

代码:

/*
 Project: 数组的整体赋值与复制
 Date: 2018/07/31
 Author: Frank Yu
 memset(数组名,0或-1,字节)
 memcpy(数组名,数组名,字节)
*/
#include<iostream>
#include<cstring> //memset需要头文件
#include<cstdio>
#define n 5
using namespace std;
int main()
{
 int a[n];
 int b[n];
 memset(a,0,sizeof(a));//初始化为0
 //memset(b,1,sizeof(b));//初始化为1,错误
 memset(b,-1,sizeof(b));
 printf("请输入%d个数:\n",n);
 for(int i=0;i<n;i++)
 {
 scanf("%d",&a[i]);
 }
 printf("第一个数组为:\n");
 for(int i=0;i<n;i++)
 {
 printf("%d ",a[i]);
 }
 printf("\n");
 printf("第二个数组为:\n");
 for(int i=0;i<n;i++)
 {
 printf("%d ",b[i]);
 }
 printf("\n");
 memcpy(a,b,sizeof(b));//b的元素复制给a
 printf("第一个数组被第二个数组覆盖后:\n");
 for(int i=0;i<n;i++)
 {
 printf("%d ",a[i]);
 }
 return 0;
}

结果截图:

20190304更新...

fiil函数需要头文件 algorithm fill执行速度不如memset

fill(first,last,val)对数组进行初始化,first,last为地址,val为值。例如,fill(a,a+5,123) 将数组a的前5个初始化为123。

补充知识:C++ 中使用memset和memcpy 对字符串和字符串数组处理

我就废话不多说了,大家还是直接看代码吧~

#include <iostream>
#include <string.h>
using namespace std;
struct SomeInfo
{
 char id[30];
 char name[30];
};

struct TotalInfo
{
 char total[20];
 SomeInfo my[10];
};

class myClass
{
 public:
 myClass()
 {
 }

 ~myClass()
 {
 } 

 void memcopy(int ,TotalInfo);
 void print();
 private:
 TotalInfo m_totalInfo;
 int m_count;
}; 

void myClass::memcopy(int count ,TotalInfo info)
{
 m_count = count;
 memcpy(&m_totalInfo,&info,sizeof(m_totalInfo));
}
void myClass::print()
{
 std::cout << m_totalInfo.total << std::endl;
 for (int i = 0; i != m_count ; ++i)
 {
 std::cout << m_totalInfo.my[i].id << std::endl;
 std::cout << m_totalInfo.my[i].name << std::endl;
 }
}
int main()
{
 myClass here = myClass();
 TotalInfo totalInfo;
 memset(&totalInfo, 0, sizeof(totalInfo));
 char total[20] = "totalInfo.total";
 memcpy(totalInfo.total,total,20);
 int count = 5;
 for (int i = 0; i != count ; ++i)
 {
 char _id[30] = "totalInfo.Some.id";
 char _name[30] = "totalInfo.Some.name";
 memcpy(totalInfo.my[i].id, _id,sizeof(_id));
 memcpy(totalInfo.my[i].name, _name,sizeof(_name));
 }
 here.memcopy(count, totalInfo);
 here.print();
 return 0;
}

在main函数的第三行,memset初始化新申请的内存。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。

一共三个参数,地址,请零(目前做的是清零动作,而不是char型值),地址空间大小。

memcpy 也有三个参数,一个目标地址,源地址,和 大小。

以上这篇C/C++中memset,memcpy的使用及fill对数组的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在<string.h>头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, size_t n); 这里s可以是数组名,也可以是指向某一内在空间的指针: v为要填充的值: n为要填充的字节数: 例子: struct data { char num[100]; char name[100]; int n; }; struct data a, b[10]; me

  • C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作 用 法: void memset(void *s, char ch, unsigned n); 程序示例: #include <string.h> #include <stdio.h> #include <memory.h> int main(v

  • C++中memcpy和memmove的区别总结

    变态的命名 我们在写程序时,一般讲究见到变量的命名,就能让别人基本知道该变量的含义.memcpy内存拷贝,没有问题;memmove,内存移动?错,如果这样理解的话,那么这篇文章你就必须要好好看看了,memmove还是内存拷贝.那么既然memcpy和memmove二者都是内存拷贝,那二者究竟有什么区别呢? 先说memcpy 你有没有好好的参加过一场C++笔试.让你写出memcpy的实现,这是多么常见的笔试题啊.现在,拿起你的演算纸和笔;是的,是笔和纸,不是让你在你的IDE上写.写不出来?看下面吧:

  • 浅析C++中memset,memcpy,strcpy的区别

    复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h> //memcpy:按字节复制原型:extern void* memcpy(void *dest,void *src,unsigned int count)//功能:由src所指内存区域复制count个字节到dest所指的内存区域://同strcpyvoid *memcpy_su(void

  • C/C++中memset,memcpy的使用及fill对数组的操作

    对数组的整体赋值,以及两个数组间的复制容易出错,这里使用string头文件中的memset和memcpy进行 不必遍历数组,速度快. 之前没有头文件,显示decla 头文件: 代码: /* Project: 数组的整体赋值与复制 Date: 2018/07/31 Author: Frank Yu memset(数组名,0或-1,字节) memcpy(数组名,数组名,字节) */ #include<iostream> #include<cstring> //memset需要头文件 #

  • JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象 Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能 1.1 定义数组 声明有10个元素的数组 复制代码 代码如下: var a = new Array(10); 此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如

  • JavaScript中数组常见操作技巧

    效果图如下所示: Tip: 右键在新标签中打开查看清晰大图 下面介绍JavaScript中的数组对象遍历.读写.排序等操作以及与数组相关的字符串处理操作 创建数组 一般使用数组字面量[]创建新数组,除非想要创建指定长度的数组 // good var arr = []; var arr = ['red', 'green', 'blue']; var arr = [ ['北京', 90], ['上海', 50], ['广州', 50] ]; // bad var arr = new Object()

  • 在PHP语言中使用JSON和将json还原成数组的方法

    在之前我写过php返回json数据简单实例,刚刚上网,突然发现一篇文章,也是介绍json的,还挺详细,值得参考.内容如下 从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码. 一.json_encode() <?php $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr); ?> 输出 {"a&

  • php each 返回数组中当前的键值对并将数组指针向前移动一步实例

    each函数返回数组中当前的键/值对并将数组指针向前移动一步 基本语法 array each ( array &$array ) 在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元.如果要再用 each 遍历数组,必须使用 reset() . 参数介绍: 参数 描述 array 必需.规定要使用的数组. each() 函数生成一个由数组当前内部指针所指向的元素的键名和键值组成的数组,并把内部指针向前移动. 返回值: 返回 array 数组中当前指

  • Android中使用 AutoCompleteTextView 实现手机号格式化附带清空历史的操作

    有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能.同时要具备手机格式化的功能.下拉列表最后一行是有个清除历史的功能.可是点击"清除历史"却把文字要设置进去AutoCompleteTextView中.这样的效果显然很糟糕.所以我就写了这样一个简单的demo.来帮助遇到这种问题的朋友解决这样一个问题.二话不多说直接上代码. 布局文件(activity_main.xml)代码如下: <?xml version="1.0"

  • 在axios中使用params传参的时候传入数组的方法

    如下: changeList为一个数组 此时请求的参数格式为下图 解决方案为 将数组json序列化 此时参数格式为 以上这篇在axios中使用params传参的时候传入数组的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐