0
char *tokens[100];  

memset(tokens,'\0',sizeof(tokens));  

tokens[n]=strtok(tempVar,",");

此代码有效吗?我认为 memset 正在填充随机的内存位置,对吗?

4

4 回答 4

3

它是有效的,但不是很有用,因为没有很好地定义将一堆指针设置为全位为零的结果。不能保证NULL指针(在内存中)看起来“所有位为零”,所以这是不好的做法。

不,这不是在填充“随机”内存,而是在填充tokens数组占用的内存。

于 2013-01-08T16:05:26.057 回答
2

它将清除由 100 个指针组成的数组的令牌,而不是这些指针指向的内存。

于 2013-01-08T16:05:05.210 回答
1

我会将 memset 位重写为:

memset(tokens, 0, sizeof(tokens));  

因为您所做的实际上是将零分配给数组中的所有指针。否则代码是有效的,但我不确定它是否符合您的期望。

于 2013-01-08T16:05:33.647 回答
1

它是有效的代码(除了n在示例中未定义)。

memset像这样正在初始化。您正在将整个tokens变量归零。这不是一个随机的位置。在您的示例中,这也不是强制性的。

另外,请注意,strtok不会返回令牌的副本,而是修改tempVar并返回指向其元素的指针。如果tempVar超出范围,tokens元素指向的内存位置将成为悬空指针,取消引用它们将调用未定义的行为。

于 2013-01-08T16:05:47.487 回答