使用memset设置数组

时间:2012-07-17 18:50:53

标签: c arrays memset

我还是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 ... 

}

2 个答案:

答案 0 :(得分:9)

您是在寻找零个字符,还是将数字归零?初始化数组时:

memset(arr, 0, count);

相当于

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

因为0=='\0'。字符串的长度是第一个空终止符的位置,因此您的字符串是零长度,因为支持它的数组用零填充。人们这样做的原因是,当他们向字符串添加内容时,他们不需要重新使用null来终止它。

如果您希望您的字符串为“0000”...请使用字符零:

memset(arr, '0', count);

但请记住将其终止:

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

答案 1 :(得分:2)

如果您最初尝试对数组进行零填充,最好使用calloc而不是malloc。

所有malloc都会为您提供一个具有随机,不确定值的内存块。而calloc为你提供了一块内存并将其填充为零,保证你不会有垃圾。