我正在使用C++编写一个包装器,用来调用C库。在某个时刻,我需要将std::string
转换为C风格的字符串。有一个类有一个函数可以返回字符串。如果字符串很短,则可以通过强制类型转换来实现,否则无法实现。以下是一个简单且精简的示例,说明了这个问题:
#include <iostream>
#include <string>
class StringBox {
public:
std::string getString() const { return text_; }
StringBox(std::string text) : text_(text){};
private:
std::string text_;
};
int main(int argc, char **argv) {
const unsigned char *castString = NULL;
std::string someString = "I am a loooooooooooooooooong string"; // Won't work
// std::string someString = "hello"; // This one works
StringBox box(someString);
castString = (const unsigned char *)box.getString().c_str();
std::cout << "castString: " << castString << std::endl;
return 0;
}
执行上面的文件将其打印到控制台:
castString:
如果我交换对 someString
的注释,它会正确地打印:
castString: hello
这是怎么可能的?
std::cout << "castString: " << (const unsigned char *)box.getString().c_str() << std::endl;
- chqrliec_str()
的返回值存储在临时对象中以供稍后使用。 - chqrlie