【问题标题】:Does getenv return heap memory that I can reallocate to?getenv 是否返回我可以重新分配的堆内存?
【发布时间】:2019-11-15 22:31:26
【问题描述】:

好的,所以我需要将结果连接到 getenv。我不允许定义任何其他变量。如果 getenv 返回堆指针,那么我可以重新分配它以连接吗?是,还是不是?

【问题讨论】:

  • 简答:否。
  • 试一试,告诉我们发生了什么(如果您的计算机仍然可以工作)。
  • @Orace 糟糕的建议。很多时候,当人们“只是尝试一下”时,即使未定义某些东西似乎也能奏效,并且他们学到了错误的教训。

标签: c realloc getenv


【解决方案1】:

根据the documentation

正如通常实现的那样,getenv() 返回一个指向环境列表中的字符串的指针。 调用者必须注意不要修改此字符串,因为这会改变进程的环境。

修改还包括调用free()。该文档有效地解释了您不拥有指针,您无法更改它,您无法释放它。它被认为是只读的。

如果需要,请改为使用 strdup() 或类似的东西来制作副本,并且您将拥有该副本。

此外,getenv() 返回的值仅在进行下一次调用之前有效,此时它已失效。如果您需要保留或更改此信息,您必须制作一份副本。

【讨论】:

    【解决方案2】:

    没有

    来自the get_env manpage

    如通常实现的那样,getenv() 返回一个指向字符串的指针 在环境列表中。调用者必须注意不要修改 这个字符串,因为那会改变进程的环境。

    【讨论】:

      【解决方案3】:

      http://www.cplusplus.com/reference/cstdlib/getenv/

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

      【讨论】:

        猜你喜欢
        • 2014-08-14
        • 2021-12-30
        • 2020-08-19
        • 1970-01-01
        • 2019-12-10
        • 2020-09-01
        • 2011-08-16
        相关资源
        最近更新 更多