- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
var
S: string;
begin
SetLength(S, MAX_SIZE);// when casting to a PChar, be sure the string is not empty
SetLength(S, GetModuleFilename(0, PChar(S), Length(S)));
// statements
end;
To eliminate the overhead of copying the buffer, you can cast the string to a PChar (if you are certain that the routine does not need the PChar to remain in memory). http://docwiki.embarcadero.com/RADStudio/en/Passing_a_Local_Variable_as_a_PChar
我们有一个字符串,它将保留在内存中,直到其引用计数递减到 0,因此它不会在作用域过程中被删除。那么,为什么我们需要 PChar
保留在内存中?是否有某些 API 函数需要与之前传递给另一个 API 函数的完全相同的 PChar
引用?
特别是我正在考虑示例代码。因此,问题一定是“为什么例程需要传递给它的 PChar(字符串类型转换)在返回后保留在内存中?”。异步 I/O 例程,或者在调用者返回后访问传递的 pchar 的异步方法,或者由另一个线程修改全局字符串都是很好的理由。
最佳答案
有时 API 会将指针存储到稍后的时间。例如,考虑异步 IO。
或者,如果您编写如下代码,它也会失败:
function Broken():PChar;
var s:string;
begin
s:=IntToStr(Random(100));//no string constant
return PChar(s);
end;
一个重要的一点是,如果您将 refcount>1 的字符串转换为 PChar
,它将创建一个副本,然后向您提供一个 refcount=1 的字符串。因此,一旦您传入的 s 无效,即使它的 refcount>1,您的 PChar
也会变得无效。
另一个损坏的示例:
var p:PChar;
var s:string;
s := IntToStr(Random(100));//no string constant
p := PChar(s);
s := "ABC";
DoSomething(p);//p is invalid by now
关于delphi - 为什么例程需要传递给它的 PChar(字符串类型转换)在返回后保留在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9194769/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!