function getstr(s:pchar):pchar;
var
tmp:string;
begin
tmp:=string(s);
result:=pchar(tmp);
end;showmessage(getstr('d'));//这里显示为空
showmessage(getstr('ddssssdd'));//这里正常请指点,谢谢!
var
tmp:string;
begin
tmp:=string(s);
result:=pchar(tmp);
end;showmessage(getstr('d'));//这里显示为空
showmessage(getstr('ddssssdd'));//这里正常请指点,谢谢!
解决方案 »
- 跨进程,操作TDBNavigator?
- 可以让TWebBrowser只下载代码而不执行吗!??
- 请问如何在程序中用代码打开ADOconnection的数据连接属性?
- 闪动??????????????????
- "EhLib 的函数集可以从 Text以及其内部格式的数据导入到DBGridEh的数据集中"具体是怎么操作的,有人知道嘛
- 如何在自定义函数里用控件?
- 请高手讲解一下这几个关于对象创建释放的语句的区别
- 请问怎样创建一个过程?
- 紧急求助,使用SPCOMM接收的問題
- 哇呀呀,偶上午的这个贴子怎么打不开?服务器怎么近来老出错?只好再问一次,请大家推荐一个制作帮助的软件吧,偶用了耶书制造,感觉不太好,有没有其他中文的呢?//牛虻
- 应界生在北京找Delphi开发方面的工作,难吗?谢谢!
- 有一个月份的数值从“1”到“12”,我想把他转换成这样,是“1”就变成“01”,是“2”就变成“02”,是“10”就不变,该如何做
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(getstr('s'));
showmessage(getstr('ddssssdd'));
end;function TForm1.getstr(s: pchar): pchar;
begin
result:= s;
end;
问题是我要在以下两行中间对字符串进行其他的处理.
tmp:=string(s);
result:=pchar(tmp);
function getstr(s:string):pchar;
begin
result:=pchar(s);
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
showmessage(getstr('d'));//这里显示为空
showmessage(getstr('ddssssdd'));//这里正常
end;
tmp:=string(s);
result:=pchar(tmp);为什么不行?
begin
showmessage(getstr('s'));
showmessage(getstr('ddssssdd'));
end;function TForm1.getstr(s: pchar): pchar;
var
tmp: string;
a: array[0..255] of Char;
begin
tmp:= strpas(s);
strpcopy(a,tmp);
result:= a;
end;
你以上这个是好用的,但为什么这两行,在7个字符以下的会出错,而8个或8个以上却没事呢?
tmp:=string(s);
result:=pchar(tmp);
引用:
将 string 赋值给一个 PChar 变量类型,只是简单地将string的指针值赋值给PChar 变量类型,而string 的引用计数并不因此操作而发生变化,因为这种情况 PChar 会对 string 产生依赖,当string 的引用计数为零自动释放内存空间后,PChar很可能指向一个无效的内存地址
所以建议用strpas和strpcopy进行转换。
function TForm1.getstr(s: string): pchar;
begin
result:= @s[1];
end;