簡體   English   中英

使用memset設置數組

[英]Using memset to set an array

我仍然是C的新手,我遇到了memset功能的問題。

我將一個char *傳遞給一個函數,在這個函數中我創建一個數組,然后使用memset來設置每個值。 我一直在使用dbx來觀察這個變量,因為它進入函數,並且由於某種原因它在我們傳遞memset后被設置為“”。

首先,為什么會發生這種情況? 我假設memset必須重置char *所在的內存?

其次,有沒有更好的方法將每個元素設置為“0”?

這是我的代碼:

static char *writeMyStr(char *myStr, int wCount) {

   // here myStr is set to "My String is populated"  

   char **myArr;
   myArr = (char **) malloc(sizeof(char *) * wCount);
   memset(myArr, 0, sizeof(char *) * wCount);   // myStr is set to ""

   ... populate array ... 

}

你是在尋找零字符,還是數字為零? 初始化數組時:

memset(arr, 0, count);

它相當於

memset(arr, '\0', count);

因為0=='\\0' 字符串的長度是第一個空終止符的位置,因此您的字符串是零長度,因為支持它的數組用零填充。 人們這樣做的原因是,當他們向字符串添加內容時,他們不需要重新使用null來終止它。

如果你想讓你的字符串為“0000”...使用字符零:

memset(arr, '0', count);

但請記住以null結尾:

arr[count-1] = '\0';

如果您最初嘗試對數組進行零填充,則最好使用calloc而不是malloc。

所有malloc都會為您提供一個具有隨機,不確定值的內存塊。 而calloc給你一塊內存並將其填充為零,保證你不會有垃圾。

暫無
暫無

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

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