昨天我用 C++ 编写了一小段代码,其中包含一个循环和一个数组。在程序中,每次循环重新开始时,我都需要重置数组。但是,如果我使用
memset(sum,sizeof(sum),0);
然后数组不会被重置为全0。对于这个程序,我使用:
for (i=0;i<sizeof(sum)/sizeof(int);i++) sum[i]=0;
反而。
但是,我认为循环不如函数清晰,它需要一个额外的变量,更不用说这比 memset() 函数的魔法要酷一百万倍。各位大神能不能给我解惑一下?
您实际上是将 sum 的大小写入第 0 个字节。你应该这样做memset(sum,0,sizeof(sum))。
(换句话说,参数是target、data和length并且您以错误的顺序提供了 data 和 length 。)
这是 C++,所以用 C++ 方式使用fill_n.
std::fill_n(&sum[0], sizeof(sum) / sizeof(sum[0]), 0);
你memcpy没有工作的原因是,如其他答案所述,你交换了第二个和第三个参数。
编辑:fill并且fill_n可以处理任何提供或可以被视为输出迭代器的东西。对于像您这样的标准容器,vector您可以预先调整容器的大小或使用back_inserter数组,而对于数组,您可以使用我指定的形式。
memset(sum,sizeof(sum),0);
错误的。
我想你想写:
memset(sum,0, sizeof(sum));
函数的签名memset是这样的:
void * memset ( void * ptr, int value, size_t num );
它的描述是:
将 ptr 指向的内存块的前 num 字节设置为指定值(解释为无符号字符)。
函数memset的语法是:
void *memset(void *s, int c, size_t n);
memset() 函数用常量字节 c 填充 s 指向的内存区域的前 n 个字节。
所以你需要:
memset (sum, 0, sizeof(sum));