C 为什么这句话会产生无意的副作用?
我使用了一个有副作用的语句,但我不明白为什么。如果我使用这个语句,那么剩下的就是我的程序中断C 为什么这句话会产生无意的副作用?,c,linux,bash,debugging,C,Linux,Bash,Debugging,我使用了一个有副作用的语句,但我不明白为什么。如果我使用这个语句,那么剩下的就是我的程序中断 token3=strtok(路径值“:”) 变量token3和pathvalue不在其他任何地方使用,因此不应有副作用。但是,如果我包含它们,那么当我试图运行程序的其他部分时,就会出现运行时错误。我做错了什么?整个程序是一个linux程序,它是我自己的shell,工作方式类似于bash,标记化是为了查找系统上是否安装了较少的程序。forgetenv()的此页内容丰富: 返回值getenv()指向的字符串
token3=strtok(路径值“:”)代码>
变量token3
和pathvalue
不在其他任何地方使用,因此不应有副作用。但是,如果我包含它们,那么当我试图运行程序的其他部分时,就会出现运行时错误。我做错了什么?整个程序是一个linux程序,它是我自己的shell,工作方式类似于bash,标记化是为了查找系统上是否安装了较少的程序。forgetenv()
的此页内容丰富:
返回值getenv()
指向的字符串可以静态分配,并且可以通过后续调用getenv()
、putenv(3)
、setenv(3)
或unsetenv(3)
进行修改
因此,对其进行修改可能不是一个好主意,而strtok()
就可以了。尝试先复制字符串
教训是:当C函数返回指针时,尤其是字符串时,一定要小心。谁拥有被指向的内存?forgetenv()
的此页线索丰富:
返回值getenv()
指向的字符串可以静态分配,并且可以通过后续调用getenv()
、putenv(3)
、setenv(3)
或unsetenv(3)
进行修改
因此,对其进行修改可能不是一个好主意,而strtok()
就可以了。尝试先复制字符串
教训是:当C函数返回指针时,尤其是字符串时,一定要小心。谁拥有被指向的内存?很酷,它只复制字符串就可以处理更改。很酷,它只复制字符串就可以处理更改。