将数组memset为1

时间:2013-02-07 21:08:44

标签: c

我正在尝试用一些整数初始化一个2d数组。如果我将数组初始化为0,我得到了正确的结果,但如果我使用其他整数,我会得到一些随机值。

int main()
{
    int array[4][4];
    memset(array,1,sizeof(int)*16);
    printf("%d",array[1][2]); <---- Not set to 1
}

4 个答案:

答案 0 :(得分:11)

memset将数组的每个字节设置为1而不是每个int元素。

使用所有值设置为1的初始值设定项列表或循环语句将值1复制到所有元素。

答案 1 :(得分:5)

memset仅在逐字节的基础上工作。将这些位清零通常是因为所有的整数零通常都是全零位,因此将四个全零位字节分组为一个全零位int仍然会给出零。但是,对于非字节的东西,初始化所有这些东西的最简单方法就是显式初始化所有这些。

答案 2 :(得分:4)

memset允许您将单个字节填充为内存,并且您尝试设置整数值(可能是4个或更多字节。)您的方法仅适用于数字0和{{1}这些都以二进制形式表示为-100000000

for循环没有太多麻烦:

11111111

答案 3 :(得分:0)

因为内存集对字节起作用,并将每个字节设置为1。

memset(hash, 1, cnt);

因此,一旦读取,它将显示 16843009 = 0x01010101 = 1000000010000000100000001
不是 0x00000001
但是,如果您的要求仅是布尔值或二进制值,那么我们可以使用C99标准来设置C库

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>        //Use C99 standard for C language which supports bool variables

int main()
{
    int i, cnt = 5;
    bool *hash = NULL;
    hash = malloc(cnt);

    memset(hash, 1, cnt);
    printf("Hello, World!\n");

    for(i=0; i<cnt; i++)
        printf("%d ", hash[i]);

    return 0;
}

输出:

世界,你好!
1 1 1 1 1