gpt4 book ai didi

c++ - 用 C++ 发出 putenv 警告

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:44 29 4
gpt4 key购买 nike

我正在尝试在使用 g++ 编译的程序中使用 putenv stdlib 函数,包括标志和警告 - std=c++11-Wall -Wextra

程序可以像下面这样简单:

#include<stdlib.h>
#include<iostream>
int main(int argc, char *argv[])
{
putenv("LD_LIBRARY_PATH=../Desktop/lib");
std::cout<<"hello\n";
return 0;

}

但我收到此错误警告:ISO C++ 禁止将字符串常量转换为“char*”[-Wwrite-strings]

据我在 C++ 中的理解,我应该声明:char const *str =putenv 会提示。

我知道我可以强制转换,但是否有正确的方法在 C++ 中使用 putenv 函数,或者将其作为 C 函数应该完全避免?

最佳答案

同时 std::getenv是 C++ 标准的一部分(也是 C 标准,但将来会选择一种语言,您真正使用的编程语言是 C++), putenv功能不是。

正如您可以从 putenv 的链接 POSIX 引用中看到的那样, 它的参数是 char * 类型。

这是非常重要的,也是 C 和 C++ 之间的区别:在 C 中,可以将文字字符串传递给需要 char * 的函数。在 C++ 中,所有文字字符串都是常量,并且只能传递给需要const char * 的函数。

要解决您的问题,您需要使用您初始化然后传递的非常量数组:

char env[] = "LD_LIBRARY_PATH=../Desktop/lib";
putenv(env);

重要说明:数组必须在程序的整个生命周期内有效。这意味着即使在 main 函数返回之后。

更好的解决方案(并在评论中提到)是 setenv函数,它既采用 const char * 作为参数(因此可以与文字字符串一起使用),也复制参数,这意味着范围和生命周期没有问题。


关于字符串文字。在 C 和 C++ 中,它们实际上是字符数组。不同之处在于,在 C++ 中,数组是常量。

关于c++ - 用 C++ 发出 putenv 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54279450/

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