【解決方法】C++ qstring (文字列) を char * に変換するにはどうすればよいですか?

プログラミングQA


文字列 (QString) を char * に変換しようとしていますが、エラーがわかりません。
「変換」式には、「ダングリング」ポインターに問題があるようです。 伝えられるところによると、ポインターは “build” を取得した後、使用される前に削除されます。

エラーの説明は、問題を解決するのに実際には役に立ちません…
(はい、私はすでに引数を渡していることを知っています…それで、なぜ私にそれを言うのですか?)

text.toStdString().c_str()

ポインターが「削除」される理由と、これを解決する方法について説明したいと思います。

C と C++ の混在は本当の問題ですか?

/mnt/RAID_124/PROJECTS_MAR15_REG_EXP/CCC_SOURCE/Bluetoothctl/mainwindow_bluetoothctl.cpp:334: error: cannot initialize a parameter of type 'char *' with an rvalue of type 'const char *'
mainwindow_bluetoothctl.cpp:334:27: error: cannot initialize a parameter of type 'char *' with an rvalue of type 'const char *'
text = ProcessCommand_Raw(text.toStdString().c_str(), text);
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~
mainwindow_bluetoothctl.cpp:25:59: note: passing argument to parameter 'command' here
QString MainWindow_Bluetoothctl::ProcessCommand_Raw(char *command, QString string)
                                                          ^

私が試したこと:

char *command = text.toStdString().c_str()

ばかげて-変換をパラメーターとして関数に移動しました。
もちろん効かなかった…

解決策 1

エラーメッセージのすぐそこにあります:あなたは割り当てようとしています const char *char *. IEの戻り値からconst-nessを削除しようとしています std::string.c_str(). コマンドを次のように宣言する必要があります

C++
const char *command;

実際に変更可能な文字列が必要な場合は、次のようなものを使用する必要があります strdup – cppreference.com[^] strdup を使用する場合は、忘れずに free() 範囲外になる前の char *。

コメント

タイトルとURLをコピーしました