菜鸟捉虫(1)
软件世界
菜鸟捉虫
上期正确答案:
上期在编译的时候,StrPCopy(TranChar[0],Copy(szText,i,1));无法通过编译,原因是类型不匹配。StrPCopy函数的第一个参数应该PChar类型的,而TranChar[0]则是Char类型,所以程序会报错。将TranChar[0]改成@TranChar[0]即可通过编译。另外,在程序中还有一个程序不会报错的错误,那就是忽略了资源的释放,前面使用了GetMem分配内存空间,在不使用的时候应该即时释放资源,这里使用FreeMem(TranChar,1)释放所分配的内存空间。在编写程序的时候一定要养成即时释放资源的好习惯。
获奖名单:
北京 李朝阳
广东 万可
广东 陈嘉英
河北 冯琪
新疆 吴晓贵
以上获奖读者将获得电脑报最新出品的《电脑报系列配套光盘杂志》一套。
本期题目:
下面的代码是用来将一串英文字符转换成ASCII码并将它们显示出来。其中还存在错误,请将它们找出来。首先在窗体中加入一个CommandButton控件和一个Edit控件。
unit Unit1;
interface
……
type
TForm1 = class(TForm)
Button1:TButton;
Edit1:TEdit;
procedure Button1Click(Sender:TObject);
private
function TransChar(szText:String):String;//转换为ASCII码
public
{ Public declarations }
end;
……
function TForm1.TransChar(szText:String):String;//转换为ASCII码
var
i,strLen:integer;
TranChar: PChar;
reText,TmpStr:String;
begin
strLen:=Length(szText);
reText:='';
GetMem(TranChar,1);//分配内存
FOR i:=1 TO strLen DO
BEGIN
StrPCopy(TranChar[0],Copy(szText,i,1));
TmpStr:=IntToStr(Ord(TranChar[0]));//将字母转化成ASCII码
reText:=reText + TmpStr +',';
END;
Result:=Copy(reText,1,Length(reText)-1);//返回转换结果
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
Edit1.Text:=TransChar(Edit1.Text);
end;
end.