memset显示错误的结果

时间:2015-09-29 11:29:49

标签: c memset

代码是检查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;
}

2 个答案:

答案 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 设置字节并适用于字符,因为它们是单字节,但不是整数。