gpt4 book ai didi

c - 使用 glibc 时 getenv 何时可以更改先前返回的指针的内容?

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:00 27 4
gpt4 key购买 nike

C 标准说:

The getenv function returns a pointer to a string associated with the matched list member. The string pointed to shall not be modified by the program, but may be overwritten by a subsequent call to the getenv function.

据我所知,glibc 中的 getenv 实现(我使用的是版本 2.17)从名为 char **environ 的全局变量返回元素。对 getenv 函数的每次后续调用仍会返回此数组中的一个元素(如果此类环境变量不存在,则返回 null),而不会更改任何先前返回的值。

在使用 glibc 时,是否可以通过后续调用 getenv 函数来更改先前由 getenv 函数返回的指针的内容?如果是,什么时候?

最佳答案

这实际上只是标准中的一个错误。即使 C11 保留了允许覆盖缓冲区的语言,但与此同时,它不允许与对 getenv 的其他调用进行数据竞争,只能与修改环境的(实现定义的)函数进行数据竞争,所以允许这种覆盖发生似乎是矛盾的。

在所有现实世界的实现中,包括 glibc,getenv 返回指向环境内部表示中字符串副本的指针,并且永远不会失效,除非您调用以下函数修改环境。

关于c - 使用 glibc 时 getenv 何时可以更改先前返回的指针的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19745648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com