簡體   English   中英

C ++無法正確解釋const char *到Excel庫

[英]const char* not being interpreted correctly by C++ to Excel library

我正在嘗試使用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);

有人可以告訴我怎么回事嗎? 如何使用此庫顯示變量字符串?

謝謝你的幫助。

 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()與上面的代碼會有相同的問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM