【问题标题】:Qt - C++ string concatenation segmentation faultQt - C++ 字符串连接分段错误
【发布时间】:2012-07-21 14:59:02
【问题描述】:

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

我尝试执行以下操作:

QString  sdkInstallationDirectory=getenv("somEnv");

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

我得到一个分段错误。

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

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

【问题讨论】:

    标签: c++ qt segmentation-fault string-concatenation


    【解决方案1】:
    char * getenv ( const char * name );
    

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

    为什么不检查结果?

    编辑。

    所以,检查指针不是必需的。

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

    【讨论】:

    • 嗯,该工具是由创建环境变量的安装程序安装的。没有变量=没有工具,我当然会检查它作为预防措施,但这不是原因。无论如何-很好的答案,+1。我发现了问题,与问题无关,抱歉。
    • QString 可以处理 Null-Pointer 构造,构造函数 QString(const char*) 将使用 Unicode 编码创建一个空的 QString。 sara 提供的代码非常清晰。
    【解决方案2】:

    谢谢大家的回答。

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

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

    对不起,再次感谢您!

    【讨论】:

      【解决方案3】:

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

      类似:

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

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

      How to build a full path string (safely) from separate strings?

      【讨论】:

      • 多哈。是的,这也可以,所以你必须确保上面的所有字符串都是 QStrings。 QString("\Data\") + QString(someReference)
      • QString 有 + 运算符,所以它可以工作。除了如果你有一个空指针,它就会崩溃......
      • @LKM :不一定,看看他链接中的原型。此外,pobjects 可以通过编译器在飞行中构建以适应。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2017-09-07
      相关资源
      最近更新 更多