【发布时间】:2023-03-29 22:53:02
【问题描述】:
我正在尝试将应用程序从 Windows 移植到 linux。
在 windows 中,我在 windows.h 中有一个 GetEnvironmentStrings() 函数,它以 NAME=VALUE 的形式为我提供当前进程中的环境变量及其值。
对于 Linux,我使用这样的环境变量
for (char **en=environ; *en; en++) {
std::string str(*en)
env.push_back(str); //env is a vector of strings
}
该应用程序似乎仍然无法正常工作。在 Windows 中,当我打印传递给 env 向量(字符串向量)的字符串大小时,它会将所有字符串的大小打印为 48 个字节。
而在 Linux 上大小为 8。原始应用程序使用 Unicode 版本 (GetEnvironmentStringsW) 和
使用转换函数 WideCharToMultiByte 将返回的宽字符串转换为 8 位字符串。
我没有足够的关于字符编码的知识,但我想这与字符串的编码方式有关。 知道可能出了什么问题吗?
【问题讨论】:
-
您是否在寻找 getenv(3) 和 setenv(3) (linux.die.net/man/3/getenv)?
-
你的代码看起来不错。 ideone.com/jUF5k如何打印字符串的大小?
-
environ来自哪里? -
@Code-Guru
environ可能来自main(int argc, char *argv[], char *environ[])的第三个参数。或者它只是通常可用的extern char **environ。 -
@bames53 我没有尝试在 Linux 中以这种方式访问环境变量,所以这对我来说是新的。我想我在需要环境变量的极少数情况下使用了 getenv()。
标签: c++ linux unicode environment-variables