为什么这个声明有意想不到的副作用?

Why does this statement have unintentional side-effects?

我使用的语句有副作用,但我不明白为什么。如果我使用这条语句,那么剩下的就是我的程序中断了。

token3 = strtok(pathValue, ":");

变量 token3pathvalue 没有在其他任何地方使用,因此不应该有副作用。但是,如果我包含它们,那么在尝试 运行 程序的其他部分时会出现 运行time 错误。我做错了什么?整个程序是一个 linux 程序,是我自己的 shell 工作方式类似于 bash 并且标记化是为了查找系统上是否安装了 less。

manual page getenv() 的这一页线索丰富:

The string pointed to by the return value of getenv() may be statically allocated, and can be modified by a subsequent call to getenv(), putenv(3), setenv(3), or unsetenv(3).

所以绕过并修改它可能不是一个好主意,strtok() 可以。先尝试复制字符串。

教训是:总是 当 C 函数 return 一般指针,尤其是字符串时要小心。谁拥有被指向的内存?