使用memset或strtok而不进行初始化

时间:2013-01-08 16:00:52

标签: c

char *tokens[100];  

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

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

这段代码有效吗?我认为memset正在填补一个随机的记忆位置吗?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

它将清除令牌,这是一个包含100个指针的数组,而不是那些指针所指向的内存。

答案 2 :(得分:1)

我会将memset位重写为:

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

因为你所做的实际上是为数组中的所有指针赋值为零。否则代码是有效的,但我不确定它是否符合您的预期。

答案 3 :(得分:1)

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

memset就像这样 初始化。您将整个tokens变量归零。它不是随机的位置。在您的示例中,它也不是必需的。

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