1

QChar *ではなくchar*に変換したいQStringがあります。これは、char *を受け取るメソッドに渡すためですが、constchar*を取得しないと変換できません。たとえば、私は試しました:

QString name = "name";
QByteArray byteArray = name.toUtf8();
myMailboxName = byteArray.constData();

QString name = "name";
QByteArray byteArray = name.toUtf8();
myMailboxName = byteArray.data();

ここで、myMailboxNameは私のクラスのプライベート文字*です。ただし、const char *を返し、char *に割り当てることができないため、エラーが発生します。どうすればこれを修正できますか?

4

6 に答える 6

3

これは、data()がバイト配列内のバッファのアドレスを返すためです。これは読み取ることができますが、書き込みはできません。bytearrayの外に独自のバッファーがあります。データが必要な場合は、bytearrayのバッファをmyMailBoNameにコピーする必要があります。

memcpy関数を使用する

于 2012-11-15T22:13:52.897 に答える
2

このコードスニペットを試してください

const char *myMailboxName = name.toLatin1().data();
于 2012-11-28T13:12:52.350 に答える
1

strdup を使用します。割り当てとコピーを同時に行います。完了したら、忘れずに解放してください。

于 2012-11-16T04:16:56.313 に答える
1

Mikeが推奨するように、実際に使用できますstrdupそれについてのstackoverflowの質問)が、それを行うこともできます:

// copy QString to char*
QString filename = "C:\dev\file.xml";
char* cstr;
string fname = filename.toStdString();
cstr = new char [fname.size()+1];
strcpy( cstr, fname.c_str() );

そこに行きました:stackoverflow similar question

于 2012-11-16T14:31:45.053 に答える
0

私はこのラッパーのようなものを使用します:

template<typename T, typename Y>
void CharPasser(std::function<T(char *)> funcToExecute,  const Y& str)
{
    char* c = 0;
    c = qstrdup(c, str.c_str());
    funcToExecute(c);
    delete[] c;
}

int SomeFunc(char* ){}

次に、次のように使用します。

CharPasser<int, std::string>(SomeFunc, QString("test").tostdString())

少なくともこれはタイピングのビットを節約します...:)

于 2012-12-14T12:23:29.153 に答える
0

次の例を検討して
QString str = "BlahBlah;"

くださいこれ
char* mychar = strdup(qPrintable(str));

またはこれ
char* mychr = str.toStdString().c_str();

またはこれを試してください
char* mychar = strdup(str.ascii());

すべての構文がうまくいきました;)

于 2016-04-18T19:15:14.603 に答える