拿分喽,关于pchar 和string 类型的问题,100大洋(100分)

  • 主题发起人 主题发起人 xihahi
  • 开始时间 开始时间
X

xihahi

Unregistered / Unconfirmed
GUEST, unregistred user!
我有以下程序段:
var
s:string;

s:=copy(windir,0,3);
if GetVolumeInformation(s,Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
wybz:=IntToStr(SerialNum^);
编译时提示 s 是string 类型,与pchar不匹配,
但把程序改成如下之后,可以运行,得到正确的结果:
s:=copy(windir,0,3);
if GetVolumeInformation('c:/',Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
wybz:=IntToStr(SerialNum^);
'c:/' 不一样是字符串吗?为什么'c:/' 可以运行而 s 就会编译错误

 
这个道理是这样的:
‘C:/Windows'是一个(无类型)常量,系统可以根据需要转化它的类型
但是变量的类型在Pascal中是要强制转换的。
 
s 是string 变量,系统不会将其自动转为pchar,但pchar变量却能自动转为string 变量;
而'c:/'是常量,系统能将其自动转为pchar处理。
 
PChar通常是作为ASCIIZ来使用的。
 
GetVolumeInformation(PCHAR(s),Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
wybz:=IntToStr(SerialNum^);
 
用 pChar(s)转化一下
GetVolumeInformation(pchar(s),Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0)
 
可惜了, 太晚了。 :((
 
多人接受答案了。
 
后退
顶部