代码是检查memset的工作情况C. memset正确初始化数组为0,但是当我尝试用10初始化它时,它会用一些非常大的垃圾值初始化数组。那有什么不对?
#include <stdio.h>
#include<string.h>
int main(void)
{
int dp[10008],i;
memset(dp,10,sizeof(dp));
for(i=0;i<10;i++)
printf("%d\n",dp[i]);
return 0;
}
答案 0 :(得分:11)
man memset
void *memset(void *s, int c, size_t n); DESCRIPTION The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.
您的代码:
memset(dp,10,sizeof(dp));
然后将dp
中的所有字节初始化为10。
所以你的数组看起来像(按字节):
+----------+----------+----------+----------+
| 00001010 | 00001010 | 00001010 | 00001010 | ...
+----------+----------+----------+----------+
如果你把它解释为一个整数,你得到(一些大的值)。
上面的注释基于sizeof int为4仅用于说明目的..
为了满足您将所有商品初始化为10次使用的需求:
#include <stdio.h>
#include <string.h>
int main(void)
{
int dp[10008],i;
for(i=0;i<10008;i++)
{
dp[i] = 10;
}
// do other stuff here..
return 0;
}
答案 1 :(得分:-1)
memset 设置字节并适用于字符,因为它们是单字节,但不是整数。