如何在 C++ Builder 中清除 TEdit(编辑控件和字符串)?

问题描述 投票:0回答:1

我需要清除一个具有敏感信息的

TEdit
控件,这样进程内存就不会包含它(此时我不担心页面文件)。

我尝试直接访问

String
以将当前长度设置为空格(使用
_wmemset()
),然后我将使用它来更新
Edit
控件。通过使用相同大小的空格字符串,我假设
Edit
控件将使用其现有缓冲区进行覆盖。

但是,我连

String
缓冲区都无法直接更新。我见过使用
UniqueString(EditControl->Text)
但最终以
candidate function not viable: expects an l-value for 1st argument
加上另外两个关于 no known conversion of the other string types. If I use
data()
or
c_str()
it apparently changing a copy 而不是字符串,因为如果你打印出
EditControl->Text
,你会得到相同的未修改的字符串。

所以我的第一个问题是如何清除

String
中使用的缓冲区以确保敏感数据不再在内存中。第二个是你最终如何清除
Edit
控制。

TIA!!

delphi c++builder
1个回答
0
投票

我发现访问

Text
TEdit
属性总是临时的,用于直接从控件发送/检索数据。

因此,对于敏感数据,您希望避免使用

Text
属性,而是使用一些老式的 Win32
SetWindowText()/GetWindowText()
::SetWindowText(EditControl->Handle, TCharBufWithString);

然后您可以控制自己的缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.