2009年8月12日星期三

DON'T DO THIS


Delphi的帮助中有一个条目是Returning a PChar local variable,当然这个条目说的是反例,是说长字符串与PChar之间的差别会引起的问题。在这个条目中所举的例子里,特别注释了“// DON'T DO THIS”,但是正如这一条目开头便指出的,这却是一个常见的错误,所以这样写法还是屡见不鲜,而且通常看起来也似乎正确,但是,并不是这样的。

function ReturnLocalStringToPChar: PChar;
   var S, Y: string;
   begin
      S := 'aaa';
      Y := 'bbb';
      S := S + Y;
      Result := PChar(S);
   end;

   procedure Test(S: string)
   var
     A: string;
     P: PChar;
  begin
     P := ReturnLocalStringToPChar;
     WriteLn(P);
     A := GetCurrentDir;
     WriteLn(P);
  end;

如果你认为两次打印的内容是一样的,那就错了。

所以,文档是一定要看的。想起邮件列表中有人回答问题的同时说不知道为什么很多人不看文档,而他对很熟悉的东西也是要常翻翻文档的。
同样,在前几天,在同别人调试AutoIt3脚本时,发现因为没有看到最新的文档,对返回值的判断不正确的情况。

看清楚文档,用明确知道的东西,知道自己在写什么,才可能写出可靠的代码。

没有评论: