const char *不被C ++正确解释为Excel库

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

问题在于这个库函数:

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

将string写入指定格式的单元格中。 如果格式等于0,则格式被忽略。 string在内部复制,并可以在调用此方法后销毁。 如果发生错误,则返回false。 获取Book :: errorMessage()的错误信息。

如果我将input作为像“Hello World”这样的string文字input,则显示正确。 但是,如果我尝试将input作为types为const char *的variables,它将显示垃圾。

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

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

有人可以告诉我发生了什么事吗? 我怎样才能使用这个库显示一个variablesstring?

谢谢你的帮助。

  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); 

我build议不要通过std :: string转换,而是转换为一些定义良好的编码。 例如UTF-8:

 const QByteArray companyName = MyCompany::company.toUtf8(); sheet->writeStr(4, 0, companyName.constData(), companyFormat); 

(请注意, const char* companyName = MyCompany::company.toUtf8().constData()将具有与上面的代码相同的问题)。