char *tokens[100];
memset(tokens,'\0',sizeof(tokens));
tokens[n]=strtok(tempVar,",");
这段代码有效吗?我认为memset正在填补一个随机的记忆位置吗?
答案 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
元素指向的内存位置将成为悬空指针,并且取消引用它们将调用未定义的行为。