如果将可选源getenv()参数传递给envz_get()envpint main (int argc, char *argv[], char *envp[])是否都从同一源中查找环境变量?

换句话说,envp的可选int main (int argc, char *argv[], char *envp[])参数是否引用getenv()引用的同一环境变量池?

最佳答案

以我的经验,是的,它们是相同的。如果没有,getenv()似乎并不是特别有用。这不是我几十年来测试过的东西,但是为了回答您的问题,我只是运行了一个测试,尽管标准允许getenv()使用静态内存区域作为其返回值,但其返回值都指向到main的第三个参数中等号后的第一个字符。这是我模糊的回忆,尽管那是另一个不同的unix系统,但这也是我上一次进行此测试时发生的。

话虽如此,我们还是从标准上尽可能接近地……从上一次免费的C17拟议草案中:

getenv函数在主机环境提供的环境列表中搜索以下字符串:
匹配名称所指向的字符串。环境名称集和更改方法
环境列表是实现定义的。 getenv函数不必避免数据争用
以及其他修改环境列表的执行线程。 305)

该实现应表现为好像没有库函数调用getenv函数一样。
退货
getenv函数返回指向与匹配列表成员关联的字符串的指针。的
指向的字符串不得由程序修改,但可以由后续调用覆盖
到getenv函数。如果找不到指定的名称,则返回空指针。

305)许多实现提供了修改环境列表的非标准功能。

基本上,这可能意味着,但是C语言不能完全保证这一点。

关于c - envz_get和getenv是否引用相同的环境变量池?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54567382/

10-11 16:36