c - 使用 memset 设置数组

标签 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 ... 

}

最佳答案

您是要查找零字符还是零数字?像这样初始化数组时:

memset(arr, 0, count);

相当于

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

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

如果你希望你的字符串是“0000”...使用字符零:

memset(arr, '0', count);

但是记得用 null 终止它:

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

关于c - 使用 memset 设置数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528955/

相关文章:

javascript - 如何合并来自不同输入值的数组。?

c++ - 读取/写入 void* 变量的单个字节

c - Xcode 错误 "Conflicting types"为一个非常简单的函数运行 C 代码

c - 编程语言名称的历史?

c - 动态链接库相互依赖时的链接顺序问题

c - 在 C 中发出清除输入流

当 char 缓冲区在 C 中的同一范围内多次使用时,对 char 缓冲区的使用进行了说明

.net - 循环浏览 IE 8 中的所有选项卡

c - 如何将文件的字符保存到字符串或数组中?

javascript - 多条件数组动态过滤