[英]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.