memset用法
首先如果是一个int a[10]的数组,只可以对它进行两种操作:
memset(a,0,sizeof(a))操作可以得到a的全0数组.
memset(a,-1,sizeof(a))操作可以得到a的全-1数组.
如果要置a为其他置的话就会出现不可预测的值.
这个原因很好解释:
因为memset操作是对字符进行操作的,且计算机中保存带符号数都是按补码保存的.
当我们置a[i](int)为0时,我们其实是对a的内存空间的每个直接都置0,所以正确.
当我们置a[i](int)为-1时,我们其实是对a的内存空间置11111111(-1的补码),不论是8个1还是32个1,它们都表示的是-1,所以可以置为-1.
如果是char a[10]数组的话,可以置a[i]的值为:
[-128,127]中的任意整数.
如果置其他的数就会出现不可预测的值.
如果是unsigned char a[10],那么可以置值的范围是:
[0,255].
这个原理和上面是一样的,对于我们设置值的时候直接把对应值转化为其补码,然后对每个内存字节操作.
在操作完了之后,内存字节已经按照我们的要求改变了,但是当我们要读数据的时候,我们会把内存中的内容翻译成我们本来定义的类型,所以这时候可能会出现不一致的现象.
比如unsigned char a[10] 数组,执行memset(a,-1,sizeof(a));后
内存a数组的每个字节都是11111111,但是当我们读取a[i]的时候读到了11111111,编译器再把11111111转化为unsigned char 就会返回255这个值给我们.
以上内容属于本人猜测,如有错误,希望大家指正我哦.
分享到:
相关推荐
memset用法。。。。。。。。。。。。。。
C语言memset用法详解
memset
C语言memset函数使用方法详解 一。函数原形 void * memset(void*s, int ch,size_t n) 二。函数作用 将以s内存地址为首的连续n个字节的内容置成ch,一般用来对大量结构体和数组进行清零 三。常见错误 1.搞反...
在学习memset函数的时候,查了一些资料,转一个对memset()的用法的一些初浅的体会。
内容涵盖memset函数的定义、使用方法、注意事项、局限性、安全性、优化技巧以及社区支持等高级内容。 **适用人群:** 本教程适合所有对编程和C语言感兴趣的初学者,尤其是那些需要了解如何在C语言中使用memset函数的...
memset,memcpy,strcpy 的用法,详细区别还有优缺点对比!
主要介绍了C++中memset函数用法,结合实例形式详细分析了memset函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为: void * memset( void * ptr, int value, size_t num ); 参数说明: ptr 为要操作的内存的指针。 value 为要设置的值。你既可以向 value ...
。。。
使用C/C++编程时,常使用ZeroMemory、memset或 “={0}”来对结构体对象进行初始化或清零。然而这三种方式都有各自的特点,使用时需谨慎,否则容易出现严重错误,本人解决一个导致宕机的bug,查了几小时,才发现是由...
memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,'\n'); for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t; } cout; } //第二种 string str; cin>>str; str.replace; ...
LPCTSTR,UpdateData,memset,strstr这几个资源的详细用法说明。
使用方法: char sPath[1000]; void _stdcall (*GetSelectPath)(char*sPath,AnsiString sTitle); HMODULE pHModule; pHModule=::LoadLibraryA("GetPath.dll"); if(pHModule>0) { (FARPROC&)GetSelectPath=::...
使用方法: #include "base64.h" string base64str; //这个数组我是从文件读入的 可以直接定义个数组测一下 unsigned char *pBmpBuf; ........ //原字符数组 const unsigned char* pBmpBuftmp = pBmpBuf; char...
0001 注释的使用方法及注意事项 2 0002 使用汇编语言 2 0003 如何使用内联函数 2 0004 如何使用#define自定义宏 3 0005 使用goto语句进行无条件跳转 3 0006 while循环转为for循环 3 0007 do while循环...