C++ memset

C++的memset比如我memset(n,0,sizeof(n))数组里面全部是0为什么memset(n,1,sizeof(n))数组里面全部不是1,而是一个很大的数?... C++的memset比如我memset(n,0,sizeof(n))数组里面全部是0为什么memset(n,1,sizeof(n))数组里面全部不是1,而是一个很大的数??? 展开
 我来答
玉痕天
推荐于2018-05-09 · TA获得超过132个赞
知道答主
回答量:10
采纳率:0%
帮助的人:19.5万
展开全部
函数原型
  void *memset(void *s, int ch, unsigned n);
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。
需要的头文件
<memory.h> or <string.h>

程序例
  #include <string.h>
  #include <stdio.h>
  #include <memory.h>
  
int main(void)
  {
  char buffer[] = "Hello world\n";
  printf("Buffer before memset: %s\n", buffer);
  memset(buffer, '*', strlen(buffer) );
  printf("Buffer after memset: %s\n", buffer);
  return 0;
  }
  输出结果:
  Buffer before memset: Hello world
  Buffer after memset: ************
  编译平台:
  Microsoft Visual C++ 6.0
  也不一定就是把内容全部设置为ch指定的ASCII值,而且该处的ch可为int或者其他类型,并不一定要是char类型。例如下面这样:
  int array[5] = {1,4,3,5,2};
  for(int i = 0; i < 5; i++)
  cout<<array[i]<<" ";
  cout<<endl;
  memset(array,0,5*sizeof(int));
  for(int k = 0; k < 5; k++)
  cout<<array[k]<<" ";
  cout<<endl;
  输出的结果就是:
  1 4 3 5 2
  0 0 0 0 0
  后面的表大小的参数是以字节为单位,所以,对于int或其他的就并不是都乘默认的1(字符型)了。而且不同的机器上int的大小也可能不同,所以最好用sizeof()。
  
  要注意的是,memset是对字节进行操作,
  所以上述程序如果改为
  int array[5] = {1,4,3,5,2};
  for(int i = 0; i < 5; i++)
  cout<<array[i]<<" ";
  cout<<endl;
  memset(array,1,5*sizeof(int));// 注意 这里与上面的程序不同
  for(int k = 0; k < 5; k++)
  cout<<array[k]<<" ";
  cout<<endl;
  输出的结果就是:
  1 4 3 5 2
  16843009 16843009 16843009 16843009 16843009
  为什么呢?
  因为memset是以字节为单位就是对array指向的内存的4个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。
  所以用memset对非字符型数组赋初值是不可取的!
  例如有一个结构体Some x,可以这样清零:
  memset( &x, 0, sizeof(Some) );
  如果是一个结构体的数组Some x[10],可以这样:
  memset( x, 0, sizeof(Some)*10 );
guojian2089766
2011-11-10
知道答主
回答量:30
采纳率:0%
帮助的人:27.8万
展开全部
直接贴代码来替你看看吧,memset是按照字节置位的,估计你说的memset(n,1,sizeof(n))这种情况下,每个字节都变成1,但是整型数组每个变量是4字节,因此,数组中每个元素就是
00000001000000010000000100000001,因此是一个比较大的数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海涛大兴
2011-11-04 · TA获得超过641个赞
知道小有建树答主
回答量:434
采纳率:100%
帮助的人:312万
展开全部
你的n是什么数组?字符还是其他?把代码贴上来看看
如果是字符数组,可以这样试试: memset(n, '1', 数组大小);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Mrloveblue
2012-02-27
知道答主
回答量:12
采纳率:0%
帮助的人:9.6万
展开全部
各位大神,你们都想多了!sizeof(n)里n是一个指针,各种情况我就不解释了···
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式