【问题标题】:Why does getenv() return a non-const string为什么 getenv() 返回一个非常量字符串
【发布时间】:2016-04-24 19:33:55
【问题描述】:

我正在阅读 cppreference.com 上的 std::getenv() 函数的文档,上面写着

修改 getenv 返回的字符串会调用未定义的行为。

那为什么函数不返回const char*

【问题讨论】:

  • 我也一直在想这个问题...但是在过去的 25 年里它变得更好了...我记得当时 fopen() 期望一个指向可写字符串的指针。

标签: c++ operating-system environment-variables c++14


【解决方案1】:

那为什么函数不返回const char*

可能是因为与完全不支持 const 的旧 c 标准兼容。

【讨论】:

  • @Curious 好吧,至少是 POSIX。
  • 是的。在 v7 Unix (c. 1979) 实现中,getenv() 返回了一个指针,该指针指向程序启动时放置环境字符串的内存。这是在程序参数旁边,下面是 argv[] 数组。内存布局是(栈顶)args 到 main()、argv[]、argv 内容、envp[] 数组、envp 内容(栈底)。
  • 据我所知,ANSI C 非常古老——我在 90 年代初使用它。对于仍在使用不理解 ANSI C 或 C++ 的编译器的人来说,一个简单的 #ifdef STDC 就可以解决这个问题。
  • @Curious 这是一个可能有用的资源:@​​987654321@
  • @Curious:getenv() 比 POSIX 早了 15-20 年,所以不要指望从早期的实施中学到任何东西。
猜你喜欢
  • 1970-01-01
  • 2010-10-04
  • 2017-01-08
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
相关资源
最近更新 更多