我正在编写一些非常基本的代码,但我遇到了一个错误,我不确定它为什么会发生。
我的代码如下所示:
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
有关导致此错误的原因的任何提示?
答案 0 :(得分:2)
来自getenv
文档:
getenv()
返回的指针指向内部存储器块。该函数返回的指针所指向的字符串不应被程序修改。某些系统和库实现可能允许使用特定函数(putenv,setenv ...)更改环境变量,但此类功能是不可移植的。
换句话说,请勿在{{1}}返回的结果上调用strtok()
- 首先创建自己的副本。