使用memset 的小问题
2005-07-03 23:21
239 查看
一直没有注意memset是串操作,平时都是用memset(array,0,cout*sizeof())很少用赋其他的值.
结果调用memset(array,1,100*sizeof(int)) 时发现int 数组里面乱七八糟.:P. 呵呵对于字符串数组赋值是正常,拿来对整形数组赋值就不对了。希望大家不犯这样的错误
对于上面调用反汇编代码如下:
mov eax,1010101h //扩展成32位,对于char数组来说初始值是正确的,eax 中放入了4个初始值
// 为1char元素,但对于int就变味了
mov ecx,100
lea edi,[array]
rep stos dword ptr [edi] //一次赋值32位,把eax值移入array,并减少ecx
这样的话,int 数组每个值就是 1010101h 了.
同样因为如此:下面的操作 array[5]内容还是0
char* array = new char[5];
memset(array,1,5*sizeof(char));
因为串操作只是4位操作,而char只有1位,最后第5位就没有处理了
同样memcpy也是这样的
结果调用memset(array,1,100*sizeof(int)) 时发现int 数组里面乱七八糟.:P. 呵呵对于字符串数组赋值是正常,拿来对整形数组赋值就不对了。希望大家不犯这样的错误
对于上面调用反汇编代码如下:
mov eax,1010101h //扩展成32位,对于char数组来说初始值是正确的,eax 中放入了4个初始值
// 为1char元素,但对于int就变味了
mov ecx,100
lea edi,[array]
rep stos dword ptr [edi] //一次赋值32位,把eax值移入array,并减少ecx
这样的话,int 数组每个值就是 1010101h 了.
同样因为如此:下面的操作 array[5]内容还是0
char* array = new char[5];
memset(array,1,5*sizeof(char));
因为串操作只是4位操作,而char只有1位,最后第5位就没有处理了
同样memcpy也是这样的
相关文章推荐
- 关于使用memset(a,0xff,sizeof(a)),输出-1的问题
- 使用memset的问题
- 类对象使用 memset 应注意的问题
- memset的使用问题
- 一个关于memset使用的问题
- 关于在构造函数中使用memset或者ZeroMemery问题
- 使用JSTL的标签是需要注意的几点问题
- Hexo 使用中遇到的问题总结
- 关于Windows10中使用预览窗格无法预览Excel及图片文件的问题
- ROS使用过程中的常见问题与解决办法
- ThinkPHP 使用表单令牌遇到的问题
- php中使用$_REQUEST需要注意的一个问题
- 使用Spring配置事务时遇到的问题
- MySQL-使用游标循环中断的问题
- 夜神模拟器使用的小问题
- AndroidStudio 2.2使用 Java 8 功能和 Jack 工具链的问题
- C#中使用存储过程返回值的问题
- 使用 Request.QueryString 接受参数时,跟编码有关的一些问题
- matplotlib使用show方法后不能显示图像的问题
- Matlab 函数进阶:使用匿名函数和内嵌函数处理多变量传递问题(Matlab 7.0以上)