C++ C+未能正确解释常量字符*+;到Excel库

C++ C+未能正确解释常量字符*+;到Excel库,c++,c,excel,qt,libxl,C++,C,Excel,Qt,Libxl,我尝试使用LIXXL从C++程序输出文本到Excel文件。 此库函数存在以下问题: bool writeStr(int row, int col, const wchar_t* value, Format* format = 0) 将字符串写入具有指定格式的单元格。如果格式等于0 然后忽略格式。字符串是在内部复制的,可以 调用此方法后销毁。如果发生错误,则返回false。得到 Book::errorMessage()的错误信息 如果我以字符串文字形式输入,如“Hello World”,它将正确

我尝试使用LIXXL从C++程序输出文本到Excel文件。 此库函数存在以下问题:

bool writeStr(int row, int col, const wchar_t* value, Format* format = 0)
将字符串写入具有指定格式的单元格。如果格式等于0 然后忽略格式。字符串是在内部复制的,可以 调用此方法后销毁。如果发生错误,则返回false。得到 Book::errorMessage()的错误信息

如果我以字符串文字形式输入,如“Hello World”,它将正确显示。但是,如果我尝试将输入作为const char*类型的变量,它将显示垃圾

下面是我的代码
MyCompany::company
是一个
QString

const char* companyName = MyCompany::company.toStdString().c_str();
sheet->writeStr(4, 0, companyName, companyFormat);
有人能告诉我发生了什么事吗?如何使用此库显示变量字符串

谢谢你的帮助

 const char* companyName = MyCompany::company.toStdString().c_str();
这里的问题是,在该语句结束后,指向的缓冲区
companyName
立即变为无效,因为当toStdString()返回的临时std::string被销毁时,c_str()变为无效。您可以通过保持std::字符串足够长来解决此问题:

const std::string companyName = MyCompany::company.toStdString(); //survives until the end of the block
sheet->writeStr(4, 0, companyName.c_str(), companyFormat);
我建议不要通过std::string进行转换,而是转换为一些定义良好的编码。例如UTF-8:

const QByteArray companyName = MyCompany::company.toUtf8();
sheet->writeStr(4, 0, companyName.constData(), companyFormat);
(请注意,
const char*companyName=MyCompany::company.toUtf8().constData()
的问题与上面的代码相同)