簡體   English   中英

將數組memset為1

[英]memset an array to 1

我試圖用一些整數初始化一個2d數組。如果我將數組初始化為0我得到正確的結果但是如果我使用其他整數我得到一些隨機值。

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

memset將數組的每個字節設置為1而不是每個int元素。

使用所有值設置為1的初始值設定項列表或循環語句將值1復制到所有元素。

memset僅在逐字節的基礎上工作。 將這些位清零通常是因為所有的整數零通常都是全零位,因此將四個全零位字節分組為一個全零位int仍然會給出零。 但是,對於非字節的東西,初始化所有這些東西的最簡單方法就是顯式初始化所有這些。

memset允許您將單個字節填充為內存,並且您嘗試設置整數值(可能是4個或更多字節。)您的方法僅適用於數字0-1因為它們都以二進制表示為0000000011111111

for循環不是太麻煩:

int main() {
    int i, val = 1, max = 4;
    int array[max][max];

    max = max * max;

    for(i = 0 i < max; i++) {
       array[i] = val;
    }
}

因為memset在字節上工作並將每個字節設置為1。

memset(hash, 1, cnt);

所以一旦讀取,它將顯示的值16843009 = 0x01010101 = 1000000010000000100000001
不是0x00000001
但是,如果您的requiremnt僅用於bool或二進制值,那么我們可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM