0

私はC++を初めて使用するので、さようならC++の落とし穴に陥ったと思います。

私は次のことをしようとしました:

QString  sdkInstallationDirectory=getenv("somEnv");

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

セグメンテーション違反が発生します。

someSourceDirこれは、const charの連結と、 QStringに割り当てられたメモリ不足が原因だと思います。

私の間違いは正確には何ですか?この連結をどのように行うことができますか?

4

3 に答える 3

3
char * getenv ( const char * name );

要求された環境変数の値を含むnullで終了する文字列、またはその環境変数が存在しない場合はNULL

結果を確認してみませんか?

編集。

したがって、ポインタをチェックする必要はありません。

歴史的な理由から、QStringはヌル文字列と空の文字列を区別します。null文字列は、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 に答える