Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么这句话会产生无意的副作用?_C_Linux_Bash_Debugging - Fatal编程技术网

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,标记化是为了查找系统上是否安装了较少的程序。

for
getenv()
的此页内容丰富:

返回值
getenv()
指向的字符串可以静态分配,并且可以通过后续调用
getenv()
putenv(3)
setenv(3)
unsetenv(3)
进行修改

因此,对其进行修改可能不是一个好主意,而
strtok()
就可以了。尝试先复制字符串

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

for
getenv()
的此页线索丰富:

返回值
getenv()
指向的字符串可以静态分配,并且可以通过后续调用
getenv()
putenv(3)
setenv(3)
unsetenv(3)
进行修改

因此,对其进行修改可能不是一个好主意,而
strtok()
就可以了。尝试先复制字符串


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

很酷,它只复制字符串就可以处理更改。很酷,它只复制字符串就可以处理更改。