qPrintable() 和 strdup()
qPrintable() 和 strdup() 是 Qt 中常用的字符串转换函数。
qPrintable() 函数用于将 QString 类型转换成 char* 类型,用于 C++ 中使用的字符串函数。例如:
Code: [全选] [Expand/Collapse]
- QString str = "Hello World";
- qDebug() << qPrintable(str); // 输出:Hello World
strdup() 函数用于将一个 C 风格的字符串拷贝到一个新的内存地址中,并返回该地址的指针。例如:
Code: [全选] [Expand/Collapse]
- const char* str1 = "Hello World";
- char* str2 = strdup(str1);
- // 使用 str2
- free(str2); // 释放 str2 指向的内存
在多线程中,由于多线程可能会同时访问同一个字符串,因此需要注意使用临时指针的问题。建议在多线程中使用 constData() 函数获取到字符串的常量指针,然后使用 strdup() 函数为其分配内存,使用完后再使用 free() 函数释放内存,以确保线程安全。
其他转换函数
除了 qPrintable() 和 strdup(),在 Qt 中还有许多常用的字符串转换函数。
以下是其中的一些:
toStdString():将 QString 类型转换为 std::string 类型。
Code: [全选] [Expand/Collapse]
- QString str = "Hello World";
- std::string stdStr = str.toStdString();
Code: [全选] [Expand/Collapse]
- std::string stdStr = "Hello World";
- QString str = QString::fromStdString(stdStr);
Code: [全选] [Expand/Collapse]
- QString str = "Hello World";
- QByteArray latin1Array = str.toLatin1();
Code: [全选] [Expand/Collapse]
- QString str = "Hello World";
- QByteArray utf8Array = str.toUtf8();
Code: [全选] [Expand/Collapse]
- QByteArray latin1Array = "Hello World";
- QString str = QString::fromLatin1(latin1Array);
Code: [全选] [Expand/Collapse]
- QByteArray utf8Array = "Hello World";
- QString str = QString::fromUtf8(utf8Array);
————————————————