2012-06-06 83 views
0

字符串這是我的計劃:帕斯卡爾錯誤

program str_err; 

var st:string; 

begin 

     st:='ERROR'; 

     delete(st,2,1); 

     writeln(st); 

     write(st[5]); 

     readln; 

end. 

我運行它,它表明st='EROR'st[5]='R'

我已經從字符串中刪除了一個字符,並且st[5]必須是'',而它仍然是R

回答

1

如果你的編譯器使用範圍檢查,你會得到運行時錯誤,試圖讀取字符串的結尾。否則,你只會得到該內存空間中的垃圾。難怪它仍然被之前的那個角色所佔據。 st刪除之前是5ERROR,刪除之後是4ERORR(字符串長度先來),所以R仍然存在。如果刪除複製了字符串而不是將其移動到適當位置,您會得到隨機垃圾。

+0

很好的答案,非常感謝。 –

+0

但是,如何讓字符串變爲4EROR,以備將來使用? –

+0

在刪除之前,只需將st [5]分配給您想要的任何字符即可。但是這是非常沒有意義的,在刪除它的空閒內存之後,編譯器會決定將會出現什麼,你永遠不會知道。 –