我正在尝试使用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);
有谁能告诉我发生了什么事?如何使用此库显示变量字符串?
感谢您的帮助。
答案 0 :(得分:2)
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()
与上面的代码存在同样的问题。)