我在将以下C ++代码转换为Delphi时遇到问题。这是代码:
char dbcc_name[1]
这就是我认为应该的样子:
dbcc_name : array [0..0] of Char;
但是,我知道此字段应该返回一个名称,而不仅仅是一个字符。
所以,也许是这样的:
dbcc_name: array of Char;
现在,这看起来不错,但是无法预测名称的持续时间,它可能会返回一些带有红宝石和#0终止符的东西,但这是-我认为-不是合适的方式。使用指向此数组的指针是否明智?喜欢:
dbcc_name: PChar;
谢谢你。
您第一次是正确的,只是数据类型错误。改用AnsiChar
,在C / C ++中为char
:
dbcc_name: array[0..0] of AnsiChar;
在Delphi 2009+中,Char
是WideChar
的别名,在C / C ++中是Windows上的wchar_t
,在其他平台上是char16_t
。
就是说,在C / C ++中,当一个1元素数组表示结构体的可变长度数据时是有意义的,它是结构体中的最后一个字段。在这种情况下,该结构通常存在于更大的已分配内存块中。在C / C ++中没有检查数组边界的方法,只要数组的内容不超过分配该数组的内存的边界,它的内容就可以超过该数组的边界。 [decays指向第一个元素的指针。在C语言中,很常见的是利用它来定义一个结构,该结构直接在其中嵌入了可变长度数据,可以按名称进行引用,而不必在内存中的其他位置分配数据。这在内存有限的嵌入式系统中特别有用。
Win32 API中有几种结构将这种方法用于可变长度数据。 Raymond Chen在他的博客中对此进行了更详细的讨论: