为什么这个声明有意想不到的副作用?
Why does this statement have unintentional side-effects?
我使用的语句有副作用,但我不明白为什么。如果我使用这条语句,那么剩下的就是我的程序中断了。
token3 = strtok(pathValue, ":");
变量 token3
和 pathvalue
没有在其他任何地方使用,因此不应该有副作用。但是,如果我包含它们,那么在尝试 运行 程序的其他部分时会出现 运行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 一般指针,尤其是字符串时要小心。谁拥有被指向的内存?
我使用的语句有副作用,但我不明白为什么。如果我使用这条语句,那么剩下的就是我的程序中断了。
token3 = strtok(pathValue, ":");
变量 token3
和 pathvalue
没有在其他任何地方使用,因此不应该有副作用。但是,如果我包含它们,那么在尝试 运行 程序的其他部分时会出现 运行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 togetenv()
,putenv(3)
,setenv(3)
, orunsetenv(3)
.
所以绕过并修改它可能不是一个好主意,strtok()
可以。先尝试复制字符串。
教训是:总是 当 C 函数 return 一般指针,尤其是字符串时要小心。谁拥有被指向的内存?