这是我的代码
#include <unistd.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
char *var = "TEST=/usr/home";
putenv(var);
cout<<getenv("TEST")<<endl; // This works
var[0]= 'A'; // Crashes as soon as this runs
cout<<getenv("AEST")<<endl;
return 0;
}
输出是
/usr/home
zsh: bus error ./t
如果我理解正确的话,这个var指针将成为environmnet本身的一部分,所以如果我更新这个变量,getenv也应该给我更新的东西 但在 mac 中却崩溃了。
Macbook 的结果 = 它因总线错误而崩溃 Linux 中的结果 = 没有崩溃,也没有输出,似乎该行完全被忽略了
字符串文字是常量。 使用 char var[] = "TEST=/usr/home";会起作用