2011-03-15 81 views
2

尋找如何從,說可能會丟失數據,編譯器抑制警告,德爾福2009年投給字符串長度2

st:= copy(str,0,2); 

其中ST爲字符串[2]和乙方擁有超過2個字符。

複製被定義爲從str返回一個新的字符串,它是從0,2個位置的子集。

回答

4

如果你只是寫:

st := shortstring(str); 

編譯器將爲你做好工作。

它會將str的內容剪切爲最大長度爲st。所以如果st被定義爲st: string[2];如果只檢索str的2個第一個字符。

但是你可能會在str中丟失非ascii編碼的字符(如果它只包含英文文本,則不會出現問題)。

+0

@Andreas對不起,但你錯了。如果他的系統的當前代碼頁不是WinAnsi(例如1252),但是例如是一個亞洲MBCS代碼頁,如果源字符串包含拉丁語口音,他可能還會釋放Ansi字符,例如:只有7位ASCII和Unicode字符處理當前代碼頁將按預期轉換爲短字符串內容。 – 2011-03-15 15:14:16

+0

對不起,我錯了。 – 2011-03-15 16:15:01

5

這將抑制警告,但要注意底層問題仍然存在:從Unicode轉換爲AnsiString可能會導致數據丟失。

st := ShortString(Copy(str,1,2)); 

和Delphi蜇傷是從1開始的,不要忘記,在字符串中的第一個字符是1,不是0

+0

+1。如果編譯器警告你一個* implicit * cast,那麼通過使cast * explicit *來告訴編譯器它是有意的。 – 2011-03-15 12:27:53

+0

string [2]由ansichars組成。這是一種短繩類型。我想知道OP是否知道這一點。 – 2011-03-15 12:36:28

+0

它不是unicode to ansi。它的字符串[2];串; – none 2011-03-15 12:56:19

0

你的使用是錯誤的,你要做的:

st:= copy(str,1,2); 
+2

這裏仍然會出現Delphi 2009+編譯器的警告,關於隱式字符串類型轉換。它至少期望一個明確的。 – 2011-03-15 12:46:37

+0

哦...好吧我看不到它,因爲我有D7 – philnext 2011-03-15 14:48:43

相關問題