memset函数用法及注意事项
头文件
#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函数用法及注意事项的更多相关文章
- memset函数用法
1. memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组 c:是赋给buffer的值 cou ...
- memset()函数用法及其作用
memset()函数原型是: extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值 ...
- C++ memset函数用法
#include<stdio.h>#include<string.h>int main(){ char buffer[] = "I love you!"; ...
- C语言 memset函数及其用法
定义 void *memset(void *s, int c, unsigned long n); 描述 将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int ...
- memset函数及注意事项
memset函数的原型为:void * memset(void *ptr,int value,size_t num);用于为地址ptr开始的num个字节赋值value. memset函数的头文件为:C ...
- memset函数及其用法,C语言memset函数详解
在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”. 每种类型的变量都有各自的 ...
- cpp中memset函数的注意点
可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...
- C++之memset函数
可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...
- memset函数详解
语言中memset函数详解(2011-11-16 21:11:02)转载▼标签: 杂谈 分类: 工具相关 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大 ...
随机推荐
- js内置数据类型
JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object). 基本类型有六种: number , string , boolean , null , undefined , ...
- 洛谷 P4071 [SDOI2016]排列计数
洛谷 这是一道组合数学题. 对于一个长为n的序列,首先我们要选m个使之稳定\(C^{m}_{n}\). 且要保证剩下的序列不稳定,即错排\(D_{n-m}\). 所以答案就是:\[ANS=C^{m}_ ...
- Win7环境下Apache+mod_wsgi本地部署Django
django基础已经掌握的同学可以尝试将项目发布已寻找些许成就感,以鼓励自己接下来进行django的进阶学习 以前你总是使用python manage.py runserver进行服务启动,但是却不知 ...
- 内置函数:max 用法
内置函数——max Python max内置函数 max(iterable, *[, key, default]) max(arg1, arg2, *args[, key]) Return the l ...
- centos6.9下安装composer
1.下载composer curl -sS https://getcomposer.org/installer | php ps:如果出现php无法运行的情况,请先把PHP加入环境变量 2.移动或复制 ...
- 023-Spring Boot 服务的注册和发现
一.概述 服务调用 1.1.nginx方式 1.2.注册中心 二.注册中心[zookeeper] 2.1.安装zookeeper3.4.11 2.2.服务提供方,需要在服务启动时吗.,把服务的信息(I ...
- 前端之JQuery [续]
JQuery使用技巧 1.prop属性实现全选,反选,取消功能 需求: 实现全选,反选,取消功能 代码如下: <!DOCTYPE html> <html lang="en& ...
- 使用新浪IP库获取IP详细地址
使用新浪IP库获取IP详细地址 <?php class Tool{ /** * 获取IP的归属地( 新浪IP库 ) * * @param $ip String IP地址:112.65.102.1 ...
- 20145240《Java程序设计》第一周学习总结
20145240 <Java程序设计>第一周学习总结 教材学习内容总结 第一周学习Java首先从最基本的下载.配置环境.了解基本人机命令行方式等基础知识,以及编写简单的"Hell ...
- 适配iOS9问题汇总
iOS 9适配过程中出现的问题,收集的链接资料供大家学习分享. http://wiki.mob.com/ios9-对sharesdk的影响(适配ios-9必读)/ http://www.cocoach ...