0

我是 C++ 新手,所以我想我掉进了一个新的 C++ 陷阱。

我尝试执行以下操作:

QString  sdkInstallationDirectory=getenv("somEnv");

QString someSourceDir=sdkInstallationDirectory+"\\Data\\"+someReference+ "\\src";

我得到一个分段错误。

我猜这是因为 const 字符的串联和分配给someSourceDirQString 的内存不足。

我的错误到底是什么?我该如何进行这种连接?

4

3 回答 3

3
char * getenv ( const char * name );

具有请求的环境变量值的以空字符结尾的字符串,如果该环境变量不存在,则为 NULL

为什么不检查结果?

编辑。

因此,检查指针不是必需的。

由于历史原因,QString 区分空字符串和空字符串。空字符串是使用 QString 的默认构造函数或通过将 (const char *)0 传递给构造函数来初始化的字符串。

于 2012-07-23T11:19:17.393 回答
-1

您不能将字符串与 + 一起添加。尝试使用字符串流。

就像是:

stringstream ss;
ss << sdkInstallationDirectory << "\Data\" + someReference << "\src";
string str = ss.str();

虽然,如果您使用的是 Qt,则不应将路径作为字符串连接。

请参阅如何从单独的字符串构建完整路径字符串(安全)?

于 2012-07-23T11:23:35.667 回答
-1

谢谢大家的答案。

看来我错了,分段错误是之前造成的一行,我在这里创建了我在问题中提到的引用。

我通过进一步的调试发现了它。

很抱歉造成混乱,再次感谢您!

于 2012-07-23T12:50:10.367 回答