【发布时间】:2012-07-17 18:50:52
【问题描述】:
我仍然是 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 ...
}
【问题讨论】:
-
那些人都是白痴。 malloc 的返回值是一个 void *。如果不强制转换它,无论是隐式还是显式,你都无法对它做任何事情。
-
@CharlieMartin 这是 C,不是 C++。在 C++ 中,您需要强制转换。
-
@CharlieMartin:或许那些人只知道 C.
-
@Blood:除非你需要调用
malloc,因为例如你必须与C代码交互。 -
@Mystical 在 C 中,如果你不使用它,lint 会(正确地)抱怨。实际上,在 C 中,指针可能具有不同的大小,而未转换的赋值可能会丢失。