char *tokens[100];
memset(tokens,'\0',sizeof(tokens));
tokens[n]=strtok(tempVar,",");
此代碼是否有效?我認爲memset正在填充隨機存儲器的權利?使用memset或strtok無需初始化
char *tokens[100];
memset(tokens,'\0',sizeof(tokens));
tokens[n]=strtok(tempVar,",");
此代碼是否有效?我認爲memset正在填充隨機存儲器的權利?使用memset或strtok無需初始化
它會清除令牌,它是100個指針的數組,而不是這些指針指向的內存。
它是有效的,但不是很有用,因爲設置一堆指針到所有位零的結果沒有很好地定義。不能保證NULL
指針看起來(在內存中)爲「所有位零」,所以這是不好的做法。
不,這不是填充「隨機」存儲器,它正好填充tokens
陣列佔用的內存。
我會重新寫memset的位爲:
memset(tokens, 0, sizeof(tokens));
因爲你做了什麼實際分配零到陣列中的所有指針。否則代碼是有效的,但我不確定它是否符合你的期望。
它是有效的代碼(除了n
在示例中未定義)。
memset
像這樣是初始化。你正在清零整個tokens
變量。這不是一個隨機的位置。在你的例子中,它也不是強制性的。
另外,還要注意strtok
不不返回令牌的副本,而是修改tempVar
並返回指向它的元素。如果tempVar
超出範圍,tokens
元素指向的內存位置將變成懸空指針,並且取消引用它們將調用未定義的行爲。