2015-05-19 119 views
2

我怎樣才能獲得與例如特定索引的數組的長度,如果我有這樣的PASCAL:獲取數組的長度[X]

TYPE T_PERSON = PACKED RECORD 
    Example : STRING[40]; 
    Example2 : STRING[10]; 
    Example3 : STRING[5]; 
END; 
example: ARRAY [1..30] OF T_PERSON 

數組,我想知道的example[28]長度分別爲example[x]。 我可以通過LENGTH()獲得嗎?還是有其他解決方案?

+0

你的意思是[SizeOf](http://www.freepascal.org/docs-html/rtl/system/sizeof.html)函數嗎? – Abelisto

回答

2

如果它是一個數組,你想要的元素個數:

high(example)-low(example)+1; 

據我所知有免費的Pascal和Delphi 4+長度可能也行,但不要束縛我這一點。

如果需要的字節大小,Abelisto是正確的和sizeof()是你想要的,它也適用於記錄的部分(例如的sizeof(example.example))。

如果由於對齊字節而未包裝,則總和可能不會加起來。

0

「示例」數組的每個單元/元素都有SizeOf(T_PERSON)。這是字節數。

現在,SizeOf(T_PERSON)是58個字節。

什麼我無法解釋就是爲什麼它是58個字節,而不是55個字節(因爲我希望它對於非包裝的記錄),或甚至56個字節(4字節邊界對齊包裝記錄)。

也許別人可以對此有所瞭解。

+1

像string [x]這樣的短字符串以長度字節爲前綴。這使得55字節字符數據+ 3 x長度字節= 58字節。 –

+0

我應該記住的。使用'AnsiChar'的數組[x .. y]給出確切的大小。 – Adem

0

是的,你也可以用Length函數來獲得它。

function Length(A: DynArrayType):Integer;