2015-09-07 35 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时) –