我正在尝试使用 libXl 将文本从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::string 足够长来解决这个问题:
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()
会遇到与上述代码相同的问题)。