[ad_1]
文字列 (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 *。
[ad_2]
コメント