qPrintable() 和strdup()解释

在进行多线程编程时,一个局部QString对象,经过转换成char*后,当做参数传入线程函数,结果输入一直为空。

qPrintable()strdup()

qPrintable()strdup() 是 Qt 中常用的字符串转换函数。

qPrintable() 函数用于将 QString 类型转换成 char* 类型,用于 C++ 中使用的字符串函数。例如:

QString str = "Hello World";
qDebug() << qPrintable(str);     // 输出:Hello World

该函数返回的是一个临时指针,仅在当前语句块内有效。

strdup() 函数用于将一个 C 风格的字符串拷贝到一个新的内存地址中,并返回该地址的指针。例如:

const char* str1 = "Hello World";
char* str2 = strdup(str1);
// 使用 str2
free(str2);   // 释放 str2 指向的内存

该函数返回的是一个新的内存地址,需要手动释放。

在多线程中,由于多线程可能会同时访问同一个字符串,因此需要注意使用临时指针的问题。建议在多线程中使用 constData() 函数获取到字符串的常量指针,然后使用 strdup() 函数为其分配内存,使用完后再使用 free() 函数释放内存,以确保线程安全。

其他转换函数

除了 qPrintable()strdup(),在 Qt 中还有许多常用的字符串转换函数。
以下是其中的一些:

  1. toStdString():将 QString 类型转换为 std::string 类型。

    QString str = "Hello World";
    std::string stdStr = str.toStdString();
    
  2. fromStdString():将 std::string 类型转换为 QString 类型。

    std::string stdStr = "Hello World";
    QString str = QString::fromStdString(stdStr);
    
  3. toLatin1():将 QString 类型转换为 QByteArray 类型的 Latin-1 编码。

    QString str = "Hello World";
    QByteArray latin1Array = str.toLatin1();
    
  4. toUtf8():将 QString 类型转换为 QByteArray 类型的 UTF-8 编码。

    QString str = "Hello World";
    QByteArray utf8Array = str.toUtf8();
    
  5. fromLatin1():将 QByteArray 类型的 Latin-1 编码转换为 QString 类型。

    QByteArray latin1Array = "Hello World";
    QString str = QString::fromLatin1(latin1Array);
    
  6. fromUtf8():将 QByteArray 类型的 UTF-8 编码转换为 QString 类型。

    QByteArray utf8Array = "Hello World";
    QString str = QString::fromUtf8(utf8Array);
    

需要注意的是,在多线程中使用这些函数时,也需要考虑线程安全问题。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FreeLikeTheWind.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值