我需要在運行時修改PChar類型的字符串。 幫我看看這個代碼:德爾福修改PChar類型在運行時
var
s:pChar;
begin
s:='123123';
s[0]:=#32; // SO HERE I HAVE EXCEPTION !!!
end.
現在我有例外,在Delphi 7! 我的項目沒有使用本地pascal字符串(沒有任何windows.pas類和其他)
我需要在運行時修改PChar類型的字符串。 幫我看看這個代碼:德爾福修改PChar類型在運行時
var
s:pChar;
begin
s:='123123';
s[0]:=#32; // SO HERE I HAVE EXCEPTION !!!
end.
現在我有例外,在Delphi 7! 我的項目沒有使用本地pascal字符串(沒有任何windows.pas類和其他)
用戶可以:
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.
字符串文字是隻讀的,無法修改。因此運行時錯誤。你需要使用一個變量。
var
S: array[0..6] of Char;
....
// Populate S with your own library function
S[0] := #32;
由於您沒有使用Delphi運行時庫,所以您需要想出自己的函數來填充字符數組。比如,你可以寫自己的StrLen
,StrCopy
等,你會希望要傳遞的目標緩衝區的長度,以確保不超支的版本說的緩衝區。
當然,不使用內置的字符串類型將是不方便的。你可能需要想出比特設字符數組更強大的東西。
所以怎麼可以寫一些這樣的: VAR S:陣列[0..1024]字符的; ... s:='123123'; –
你不能。正如我所解釋的,你必須編寫你自己的拷貝函數。編寫你自己的StrCopy,但要確保它有一個len參數來阻止緩衝區溢出。 –
好的。我想夢想將字節從(可能是數組)複製到pchar的功能...(當我還沒有getmem時) –
您可以將str直接傳遞給第三個塊中的StrCopy。 Asker不使用庫,所以不能使用前三個代碼塊中的任何一個。最後的塊與問題中的相同。由於我在答案中解釋的原因,運行時錯誤失敗。 –
1個例子不會工作,因爲沒有getMem和memoryManagement。 2,3因爲沒有strCopy。 4把我送到例外:( –
啊...對不起,如果你有寫你的代碼沒有任何標準模塊和不使用Pascal字符串,你應該實現你自己的StrCopy(如DH已經寫了)。這難道不是一種作業或什麼的? – g2mk