头文件
#include<cstring>//
or
#include<memory.h>
------------------------------------------

在memset使用时要千万小心,在给char 以外 的数组赋值时,
     只能初始化为0或者-1。    (看最后的0和1的补码)
///////////      给bool类型数组可以初始化1
------------------------------------------

头文件#include<cstring>
int arr[100];
memset(arr,0,sizeof(int)*100);
arr是数组的首地址,0就是要将这些地址的内容赋值为0,sizeof(int)求出int类型的长度,
乘以100就表示arr数组的整个长度。

也可以这样  ------
     memset(arr,0,sizeof(arr));

------------------------------------------

memset函数用法及注意事项memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。
其原型是:void* memset(void *_Dst, int _Val, size_t _Size);
使用时在文件头加上#include "stdlib.h" 。
_Dst是目标起始地址,_Val是要赋的值,_Size是要赋值的字节数 。

例1:

char str[9];
       我们用memset给str初始化为“00000000”,用法如下
       memset(str,0,8);
注意,memset是逐字节 拷贝的。
下面再看一个例子:
    例2:
      int num[8];
       我们用memset给str初始化为{1,1,1,1,1,1,1,1},

memset(num,1,8);//这样是不对的

一个int是4个字节的,8个int是32个字节,所以首先要赋值的长度就不应该为8而是32。
     因为memset是 逐字节 拷贝,以num为首地址的8字节空间都被赋值为1,
     即一个int变为0X00000001 00000001 00000001 00000001,
    显然,把这个数化为十进制不会等于1的。

所以,在memset使用时要千万小心,在给char以外的数组赋值时,
     只能初始化为0或者-1。    (看最后的0和-1的补码)

因为在计算机里,0的二进制都是0,-1的二进制都是1。

最近才发现memset的这个问题,之所以要写这篇文章,是因为我在自己的DES算法里多处用到了memset,而我当时却不知memset有这个问题,特此记下,引以为鉴。

---------------------
例如:

#include "stdio.h"
#include <string.h> 
int main()

   char s[100]="Golden Global View";
   memset(s,'G',6); 
   printf("%s",s);  
   getchar(); 
   return 0; 
}

结果

----------
GGGGGG Global View
----------

----------------------------------------------------------------------
补码+0和-0相同?

我知道+0和-0补码相同,可是比如在八位机上,
+0(00000000)求补码是10000000,
而-0(10000000)求补码是(00000000)啊,
求补码的做法是符号位不变,其余为取反,然后再加1,
没错吧,那我的错误出在哪里?

----------
提问者采纳

就没有正确的地方,在计算机中是不存在正负零之分的.
而你对补码理解又有错误的.补码只不过是用来表示带符号数而已.
补码的原则是:
   正数的补码是其本身,也就是原码.
   负数的补码是各位取反后加1.也就是其反码加1.
   +0的补码就是其原码,也就是说是0000 0000而已(对于8位来说)
   -0的补码是其反码加1,其反码是1111 1111,
   当然,其反码加1后就是溢出一个进位后,仍然是0000 0000.

----------------------------------------------------------------------

--------------------------------------------------------------------------------
请问-1的二进制如何表示?

不知道是1000000000000001    还是1111111111111111
我觉得是第一个,首位代表符号,0代表正、1代表负,剩下的代表实际数值,
为什么在C语言里第二个是-1呢

--------------------
提问者采纳

第一个是原码的话,
表示的也是-1第二个是补码表示的-1,
补码即原码除符号位外,全部取反+1
1000000000000001取反后是1111111111111110,再+1即1111111111111111 
C里面数是以补码方式来储存的

--------------------------------------------------------------------------------

memset函数用法及注意事项的更多相关文章

  1. memset函数用法

    1. memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组 c:是赋给buffer的值 cou ...

  2. memset()函数用法及其作用

    memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...

  3. C++ memset函数用法

    #include<stdio.h>#include<string.h>int main(){ char buffer[] = "I love you!"; ...

  4. C语言 memset函数及其用法

    定义 void *memset(void *s, int c, unsigned long n); 描述 将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int ...

  5. memset函数及注意事项

    memset函数的原型为:void * memset(void *ptr,int value,size_t num);用于为地址ptr开始的num个字节赋值value. memset函数的头文件为:C ...

  6. memset函数及其用法,C语言memset函数详解

    在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”. 每种类型的变量都有各自的 ...

  7. cpp中memset函数的注意点

    可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...

  8. C++之memset函数

    可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...

  9. memset函数详解

    语言中memset函数详解(2011-11-16 21:11:02)转载▼标签: 杂谈 分类: 工具相关  功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大 ...

随机推荐

  1. postman 编码加密汇总

    1.MD5加密 /*加密方式:将 请求头的user-agent内容+请求方式+当前时间+(Base64)请求body中的stacode参数 拼接后得到的字符串进行MD5加密*/ //1.获取reque ...

  2. IDEA 跑spring项目找不到get,set的问题

    @Autowired的用法和作用 这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get. iDEA下安装lombok这个插件就可 ...

  3. 004-ibus输入法,快捷键,浏览器

    一.输入法 用 root 身份在终端下,运行下面命令: yum install ibus-pinyin ibus ibus-gtk ibus-qt 使用im-chooser命令,选择ibus为默认输入 ...

  4. 剑指offer 面试21题

    面试21题: 题目:调整数组的顺序使奇数位于偶数前面 题一:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 解题思路:使用两个指针 ...

  5. C#使用Lock访问共享数据的问题

    lock 语句(C# 参考) lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.此语句的形式如下: 复制 Object thisLock = new Objec ...

  6. mysql用户管理(新增用户及权限管理)

    一.登录: # mysql  –u  root  –p  回车输入密码 退出: #exit; 二.修改密码: 格式:mysqladmin  –u 用户名 –p旧密码  password  新密码 # ...

  7. Hibernate深入浅出(九)持久层操作——数据保存&批量操作

      数据保存: 1)session.save session.save方法用于实体对象到数据库的持久化操作.也就是说,session.save方法调用与实体对象所匹配的Insert SQL,将数据插入 ...

  8. Linux安装jdk10

    1.官网下载jdk10 下载方式两种,一种是wget下载,一种是windows系统下载,然后上传到linux系统上. 2.解压到/usr/local/java mkdir /usr/local/jav ...

  9. Android 电容屏驱动

    Android 电容屏(一):电容屏基本原理篇 Android 电容屏(二):驱动调试之基本概念篇 Android 电容屏(三):驱动调试之驱动程序分析篇

  10. MongoDB 使用Limit和Skip完成分页 和游标(二)

    //$slice操作符返回文档中指定数组的内部值 //查询出Jim书架中第2~4本书 db.persons.find({name:"jim"},{books:{"$sli ...