このQStringからconstchar *への変換により、WindowsでDebian識別子が生成されるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/5837442

  •  27-10-2019
  •  | 
  •  

質問

libssh2をQtでラップしようとしていますが、次のコードがあります: ジェネラコディセタグプレ

問題は、ユーザー名とパスワードがシステムに接続されないことです。なぜですか?

デバッガーによると ジェネラコディセタグプレ

これらは、ユーザー名またはパスワードに指定した値ではありません。toAscii、toLatin1を試し、.data()を追加(または追加しない)しました。それでも、期待値ではなく、これらの値を取得します。私はWindowsを使用しています。これは、私が知る限り、DebianまたはUbuntuでコンパイルされたものがないため、さらに厄介な理由です。

ここで何が起こっているのですか?

役に立ちましたか?

解決

このコード: ジェネラコディセタグプレ

はこれと同等です: ジェネラコディセタグプレ

何が起こっているのかわかりますか?ステートメントが実行されるまでに、一時的なQByteArrayはコンパイラによって再び削除されています。data()は内部のQByteArrayバッファーへのポインターのみを返すため、usernameは削除/解放されたメモリを指すようになりました。

この問題を解決するには、usernameの代わりにpasswordQByteArrayconst char*に作成し、以前にusername.data()password.data()を使用していた場所の代わりに、usernamepasswordを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top