【发布时间】:2018-10-01 08:40:17
【问题描述】:
当“CurrentFile”为空时,我有这段代码拒绝返回“DefaultVal”:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TIniFile *pIni = new TIniFile("c:\\Test\\MyIni.ini");
try
{
int i = pIni->ReadInteger (L"x", L"Level", 0); //This is ok
UnicodeString s = pIni->ReadString ("x", "CurrentFile", "DefaultVal"); //Debugger shows s = NULL
}
__finally
{
pIni->Free();
}
}
//---------------------------------------------------------------------------
这是 INI 文件:
[x]
CurrentFile=
如果我将 INI 文件编辑为 CurrentFile= "something",则代码可以正常工作并且正确包含“某物”。
我做错了什么?
C++ Builder 东京 10.3.2
【问题讨论】:
-
哦...我猜一个设置为NULL的unicodestring意味着它是空的????
-
是的,在 Delphi 中,一个空字符串 (UnicodeString, AnsiString) 作为 NULL (nil) 返回。不确定它在 C++Builder 中是如何工作的。但是由于您正在调用 Delphi 函数,因此您可以期望返回 NULL (nil)。
-
@RudyVelthuis = 实际上,在 Delphi 中,调试器会为空字符串显示 "",而在 c++ 中,调试器会为空字符串显示 NULL。
-
我认为它更像
{ NULL },即一个只有 NULL 元素的结构。 AFAIK,在 C++Builder 中,这些字符串是结构或类,而在 Delphi 中,它们是内置类型。 C++Builder 结构或类模仿这些内置类型。 -
是的,在 C++ 中,
(Ansi|Wide|Unicode)String是具有单个Data成员的类,当字符串为空时为 NULL。
标签: c++builder c++builder-10.2-tokyo