0

我正在编写一些非常基本的代码,但我遇到了一个错误,我不确定它为什么会发生。

我的代码如下所示:

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,分段错误。

0x00007ffff7a98cba in vfprintf () from /lib/x86_64-linux-gnu/libc.so.6

关于导致此错误的任何提示?

4

1 回答 1

2

getenv文档:

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

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

于 2013-07-28T02:11:57.967 回答