gpt4 book ai didi

c++ - const char* 没有被 C++ 正确解释为 Excel 库

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:48 25 4
gpt4 key购买 nike

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

问题出在这个库函数上:

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

Writes a string into cell with specified format. If format equals 0 then format is ignored. String is copied internally and can be destroyed after call this method. Returns false if error occurs. Get error info with 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() 会遇到与上述代码相同的问题)。

关于c++ - const char* 没有被 C++ 正确解释为 Excel 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19533363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com