char *tokens[100];
memset(tokens,'\0',sizeof(tokens));
tokens[n]=strtok(tempVar,",");
此代码有效吗?我认为 memset 正在填充随机的内存位置,对吗?
char *tokens[100];
memset(tokens,'\0',sizeof(tokens));
tokens[n]=strtok(tempVar,",");
此代码有效吗?我认为 memset 正在填充随机的内存位置,对吗?
它是有效的,但不是很有用,因为没有很好地定义将一堆指针设置为全位为零的结果。不能保证NULL
指针(在内存中)看起来“所有位为零”,所以这是不好的做法。
不,这不是在填充“随机”内存,而是在填充tokens
数组占用的内存。
它将清除由 100 个指针组成的数组的令牌,而不是这些指针指向的内存。
我会将 memset 位重写为:
memset(tokens, 0, sizeof(tokens));
因为您所做的实际上是将零分配给数组中的所有指针。否则代码是有效的,但我不确定它是否符合您的期望。
它是有效的代码(除了n
在示例中未定义)。
memset
像这样正在初始化。您正在将整个tokens
变量归零。这不是一个随机的位置。在您的示例中,这也不是强制性的。
另外,请注意,strtok
它不会返回令牌的副本,而是修改tempVar
并返回指向其元素的指针。如果tempVar
超出范围,tokens
元素指向的内存位置将成为悬空指针,取消引用它们将调用未定义的行为。