2015-09-07 61 views
0

我需要在運行時修改PChar類型的字符串。 幫我看看這個代碼:德爾福修改PChar類型在運行時

var 
    s:pChar; 
begin 
    s:='123123'; 
    s[0]:=#32; // SO HERE I HAVE EXCEPTION !!! 
end. 

現在我有例外,在Delphi 7! 我的項目沒有使用本地pascal字符串(沒有任何windows.pas類和其他)

回答

0

用戶可以:

procedure StrCopy(destination, source: PChar); 
begin 
    // Iterate source until you find #0 
    // and copy all characters to destination. 
    // Remember to allocate proper amount of memory 
    // (length of source string and a null terminator) 
    // for destination before StrCopy() call 
end; 

var 
    str: array[0..9] of Char; 
begin 
    StrCopy(str, '123123'); 
    s[0]:=#32; 
end. 
+0

您可以將str直接傳遞給第三個塊中的StrCopy。 Asker不使用庫,所以不能使用前三個代碼塊中的任何一個。最後的塊與問題中的相同。由於我在答案中解釋的原因,運行時錯誤失敗。 –

+0

1個例子不會工作,因爲沒有getMem和memoryManagement。 2,3因爲沒有strCopy。 4把我送到例外:( –

+0

啊...對不起,如果你有寫你的代碼沒有任何標準模塊和不使用Pascal字符串,你應該實現你自己的StrCopy(如DH已經寫了)。這難道不是一種作業或什麼的? – g2mk

1

字符串文字是隻讀的,無法修改。因此運行時錯誤。你需要使用一個變量。

var 
    S: array[0..6] of Char; 
.... 
// Populate S with your own library function 
S[0] := #32; 

由於您沒有使用Delphi運行時庫,所以您需要想出自己的函數來填充字符數組。比如,你可以寫自己的StrLenStrCopy等,你會希望要傳遞的目標緩衝區的長度,以確保不超支的版本說的緩衝區。

當然,不使用內置的字符串類型將是不方便的。你可能需要想出比特設字符數組更強大的東西。

+0

所以怎麼可以寫一些這樣的: VAR S:陣列[0..1024]字符的; ... s:='123123'; –

+0

你不能。正如我所解釋的,你必須編寫你自己的拷貝函數。編寫你自己的StrCopy,但要確保它有一個len參數來阻止緩衝區溢出。 –

+0

好的。我想夢想將字節從(可能是數組)複製到pchar的功能...(當我還沒有getmem時) –