请问pchar()返回的是什么?(5分)

  • 主题发起人 主题发起人 刘亚林
  • 开始时间 开始时间

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
1.pchar()返回的是什么
2.B:pchar,这样的说明表示B是个什么东西

就这两个问题,不知道5分会不会嫌少呢?
 
1.windows字符类型,很多API都要转换成此类型才能用
2.变量
 
2.我也知道B是个变量啊大哥,我的意思是说B是个什么类型的变量,然后举个例子说明一下。象A:integer;的话,就这样讲:A是个整型变量,整型的象1,2,3啊之类的。
 
第一个问题我还是没明白,呐,你看看这段代码啊:
var B:pchar;
……
B:=pchar(replacedialog1.ReplaceText );
richedit1.SetSelTextBuf(B)

你参照着这段代码给我讲讲看,pchar是个什么类型的,pchar()又返回什么。


“windows字符类型,很多API都要转换成此类型才能用”--windows字符类型是什么?是字符吗?是str?可是我怎么觉得pchar是指针类型的呢?

你仔细看看再说好吗?帮个忙了,分是少了点,可是我真的是没办法了啊
 
string是delphi的格式的字符串
pchar是windows的格式的字符串
可能是结构不同吧,我也不是很清楚
应该不是指针类型,也是数组。

 
在Object Pascal中,String(准确的说是AnsiString)是一种可变长度的字符串,通过P
Char(AString)可以将其转换为与Windows API相兼容的字符指针类型。事实上,String
类型就是一个指针,你可以用Sizeof去读取它的大小,不论字符串的实际长度是多少,
Sizeof(AString)永远是4。String与一般的Null-Terminated字符指针不同的是,Strin
g还要保留另外的一部分空间,用于记录字符串长度和引用计数等信息。String类型在内
存中的确切格式如下:
(4字节)分配大小+(4字节)引用计数+(4字节)字串长度+(不定长)字符数组+(1
字节)$0结束字符
 
看看这段代码:
var P: PChar;

...

P := 'Hello world!';

赋值语句将P指向包含空结束串 ’Hell world!’ 副本的内存区域。

这是帮助上的一段话,那么是不是说pchar类型的变量被赋以字符串的时候,会指向这段字符串的内存区域呢?
 
我说“pchar是windows的格式的字符串”,我真的是没办法理解啊~~路过的兄弟也来帮忙啊,我想要弄得清清楚楚啊,一个问题老是蒙着的话,我就会好难受。
 
没错,指针!
 
就是将pChar()里面的字符串转换为字符指针。注意,String是字符串,pChar是字符指针。如果你使用Delphi的函数,基本上都是String类型的。但如果你使用API,可以说都是pChar类型,明白这点以后使用API直接使用pChar()就好了。
 
嘻嘻,okok

那么还有没有其它指针呢?我是说除了字符指针之外的。
 
var B:pchar;
……
B:=pchar(replacedialog1.ReplaceText );
richedit1.SetSelTextBuf(B);
//把B指向了一replacedialog1.ReplaceText字符串,再把B指向的的字符串在RichEdit中SetSelTextBuf
tips:
delphi中一般一p开头的都是指针,如pABC 就是ABC类型指针。
 
可以类比C中的CHAR *不知到你是否可以理解。
 
这个问题我想已经理解了

但是出现这个问题的原因好象大家都没找出来~~
比如说:
var
buffer:Pchar;
begin
buffer:='10101010';
……//一段写入注册表的程序
 reg.writebinaryData('binarydata',buffer,8);
end;

象这样的,10101010字符串是写不进去的。
但把上面的改成这样:
var
buffer:array[0..25] of char;

又可以写进去了。
 
以下是帮助中的一段解释,按理说应该效果是一样的,可是就是写不进去:
var

MyArray: array[0..32] of Char;

MyPointer: PChar;

begin

MyArray := 'Hello';

MyPointer := MyArray;

SomeProcedure(MyArray);

SomeProcedure(MyPointer);

end;

上面的代码中,SomeProcedure过程两次调用接受的参数是相同的值。

 
这是否是delphi7的一个BUG呢?
 
buffer:='10101010';
buffer 是 PChar,也就是说,是“以/0结尾的字符串”。算长度,应该加上后面那个“/0”啊,reg.writebinaryData('binarydata',buffer,8)
最后的应该是9吧?
我猜的。不过前面关于长度的问题,如果你学过C语言,这个概念应该有。

DELPHI在PCHAR和STRING的赋值的时候,如果给PCHAR一个常量,那么这个PCHAR指向这个常量在数据段的地址,而且,是以“/0”结尾的。
 
是以#0结束的吧~~?
 
这个8其实无所谓的,你换成5,它就写进去前面5个;

你换成20,它没有的就以0补充~~
 
后退
顶部