C++写入INI时的一个错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++写入INI时的一个错误相关的知识,希望对你有一定的参考价值。

直接看图吧,什么都还没写呢,就出问题了。按照网上的方法把字符集出行改成了“使用多字节字符集”,但是问题依然没有解决。

还有个问题,我是用QString从QT GUI上读取的用户输入,
QString str = ui->lineEdit->text().toUpper;

计划是把“str”里的内容存进.ini里面,但是存在要转换QString到LPCWSTR的问题,小弟不才,不知道该怎么办了。请问各位高人有什么好的建议么?

参考技术A (L" "),前面加个L,参数是宽字节编码的,你这个写法是多字节编码 的追问

要包含哪一个头文件呢?

追答

这个函数在什么文件里,包含一下就行了。先试试,不行在说

函数调用时的 C 到 C++ 错误

【中文标题】函数调用时的 C 到 C++ 错误【英文标题】:C to C++ error at function call 【发布时间】:2013-02-21 17:03:19 【问题描述】:

我正在尝试将 c 程序转换为 c++。该程序生成一组“*.so”文件,用于由 llvm 生成的另一个程序。基本上,llvm 生成的代码具有对当前代码的回调。我正在使用 LDPRELOAD 加载这些

作为第一步,我只是用 c++ 编译代码。编译工作正常。但是运行时会出现段错误。有一个标签dec_blk 应该包含函数dec_blk() 的地址。我对该函数及其原型使用了extern "C",以防止拆解。当它使用 c 版本运行时,标签具有正确的地址,但是当我使用 c++ 版本运行它时,该标签的值为 0。我在下面提供详细信息

LLVM 代码

subq    $24, %rsp
movq    dec_blk, %rax
movq    dec_blk+8, %rcx
movq    %rdi, 16(%rsp)
movq    %rcx, %rdi
movq    16(%rsp), %rcx
movq    %rsi, 8(%rsp)
movq    %rcx, %rsi
movq    8(%rsp), %rdx
callq   *%rax # segfaults here

函数声明

extern "C"

long int dec_blk(void*, long int*, long int* );

请你帮忙看看要找什么。我正在使用gdb进行调试

【问题讨论】:

那么你的问题解决了吗? @phresnel Nooooooooooooooooo :( 【参考方案1】:

有一个标签 dec_blk,它应该包含函数 dec_blk() 的地址。 ...但是,当我使用 c++ 版本运行它时,该标签的值为 0

您的描述与此代码匹配(您没有显示):

extern "C" long int dec_blk(...);
int main() 
  return dec_blk();

但是您问题中的反汇编与此(不同)代码匹配:

extern "C" long int (*dec_blk)(...);
int main() 
  return dec_blk();

这两个sn-ps 根本不相同。我猜你在打算使用第一个函数时使用了第二个函数。

【讨论】:

@simpleuser “情况并非如此”。你检查了如何?除非您提供更多详细信息,否则您不太可能得到令人满意的答案(而且我仍然认为我的假设很可能是正确的;至少编译后的代码是这样的)。

以上是关于C++写入INI时的一个错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试写入文件时 C++ 中的循环错误

创建ini文件,在PHP中写入值

在 C++ 中使用 Wininet 发送 POST 请求时的编码问题

Win.ini和注册表的读取写入

写入响应标头后服务器关闭连接时的 HttpClient 异常

C++ DLL 到 C# 错误:“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”