1

我正在尝试使用 libXl 将文本从 C++ 程序输出到 Excel 文件。

这个库函数出现了问题:

bool writeStr(int row, int col, const wchar_t* value, Format* format = 0)

将字符串写入具有指定格式的单元格。如果 format 等于 0,则忽略 format。字符串在内部复制,调用该方法后可以销毁。如果发生错误,则返回 false。使用 Book::errorMessage() 获取错误信息。

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

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

const char* companyName = MyCompany::company.toStdString().c_str();
sheet->writeStr(4, 0, companyName, companyFormat);

谁能告诉我发生了什么事?如何使用此库显示变量字符串?

谢谢你的帮助。

4

1 回答 1

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()将与您上面的代码有相同的问题)。

于 2013-10-23T05:39:05.527 回答