为什么memset()放在循环体内时不能正常工作?

zw3*_*324 4 c c++ arrays memset

昨天我在C++中编写了一个包含循环和数组的小片段代码.在程序中,我需要在每次循环重启时重置数组.但是,如果我使用

memset(sum,sizeof(sum),0);
Run Code Online (Sandbox Code Playgroud)

然后数组不会重置为全0.对于这个程序我用过:

for (i=0;i<sizeof(sum)/sizeof(int);i++) sum[i]=0;
Run Code Online (Sandbox Code Playgroud)

代替.

但是,我认为循环并不像函数那样清晰,它需要一个额外的变量,更不用说这比memset()函数的魔法要宽一百万次了.你们能帮我们这个吗?

小智 11

您实际上是将sum的大小写入0个第一个字节.你应该这样做memset(sum,0,sizeof(sum)).

(换句话说,参数是目标,数据长度,并且您以错误的顺序提供数据和长度.)


Mar*_*k B 7

这是C++,所以用C++方式做fill_n.

std::fill_n(&sum[0], sizeof(sum) / sizeof(sum[0]), 0);

memcpy没有工作的原因是因为,如其他答案所述,你交换了第二个和第三个参数.

编辑:fillfill_n会在任何提供或可被视为输出迭代工作.对于标准容器,vector您可以预先调整容器大小,back_inserter也可以使用while数组,您可以使用我指定的表单.