关于strtok()的一些设置

About some settings of strtok()

这是我收到的警告:

passing argument 1 of ‘strtok’ discards ‘const’ qualifier from pointer target 
type [enabled by default]

我想禁用此默认操作谁能帮我解决这个问题?

谢谢!

strtok 就地工作:它需要标记您传递给它的字符串。

当然,您可以强制进行非 const 转换,但这会违反合同。如果调用者希望在您的操作后重新使用传递的字符串怎么办?所以这是不行的。

所以如果你有一些常量字符串,你必须在使用它之前制作一个副本,例如使用 strdup

char *copy = strdup(my_const_char);
toks = strtok(copy," ",NULL);
...

最后,您将所有标记放在单独的指针中,内存已经分配并由 copy 持有。一旦您不再需要令牌,只需 freeing copy 即可清理它。

请注意,此 const 限定符问题的一般答案是:Passing Argument 1 discards qualifiers from pointer target type