Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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 打印strtok结果后vprintf()中的SIGSEGV_C_Printf_Strtok - Fatal编程技术网

C 打印strtok结果后vprintf()中的SIGSEGV

C 打印strtok结果后vprintf()中的SIGSEGV,c,printf,strtok,C,Printf,Strtok,我正在写一些非常基本的代码,我遇到了一个错误,我不知道为什么会发生这种情况 我的代码如下所示: char* path = getenv("PATH"); if(path != NULL) { char* temp; temp = strtok(path, ":"); printf("%s\n",path); printf("%s\n",temp); } 运行此代码段的结果会导致以下结果: /usr/local/sbin Segmentation fault 如

我正在写一些非常基本的代码,我遇到了一个错误,我不知道为什么会发生这种情况

我的代码如下所示:

char* path = getenv("PATH");
if(path != NULL) {
    char* temp;
    temp = strtok(path, ":");
    printf("%s\n",path);
    printf("%s\n",temp);
}
运行此代码段的结果会导致以下结果:

/usr/local/sbin
Segmentation fault
如果我在
gdb
中运行程序,我会得到错误

程序接收到信号SIGSEGV,分段故障

来自/lib/x86_64-linux-gnu/libc.so.6的vfprintf()中的0x00007ffff7a98cba


有关导致此错误的原因的任何提示?

来自
getenv
文档:

getenv()
返回的指针指向内部内存块。程序不得修改此函数返回的指针所指向的字符串。某些系统和库实现可能允许使用特定函数(putenv、setenv…)更改环境变量,但此类功能不可移植


换句话说,不要调用
strtok()
覆盖由
getenv()
返回的结果-首先创建您自己的副本。

如果我在getenv之后打印路径,我会得到“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin”,所以不是这样。只是看到了。复制字符串似乎解决了我的问题。谢谢