这段代码有问题吗?调试执行到A之前都没问题,但是过了A行,srcFileName的值变成乱码,srcText没能获得内容
      srcFileName := fodSource.FileName;
      srcStream := TFileStream.Create(srcFileName, fmOpenRead);
      srcStream.ReadBuffer(srcText, srcStream.Size);           //A
      redtSource.Text := srcText;
      srcStream.Free;

解决方案 »

  1.   

    srcText 为 string 不行吗?
    需要什么类型变量来接收?
      

  2.   

         srcFileName := fodSource.FileName;
          srcStream := TFileStream.Create(srcFileName, fmOpenRead);
          //srcStream.ReadBuffer(srcText, srcStream.Size);           //String实际上只是一个指向一个String结构的指针,如果使用ReadBuffer会直接改写掉这个指针所在内存的内容,因此这个使用方法是错误的
          SetLength(srcText,srcStream.Size); //先根据需要对String进行内存分配
          srcStream.ReadBuffer(srcText[1], srcStream.Size); //写入到String指向的真正的内存当中
          redtSource.Text := srcText;
          srcStream.Free;
      

  3.   

    用setLength分配的字符串要不要手动释放?
      

  4.   

    看你需要,如果分配的内存比较大,并且当前的过程(函数)未执行完的话,可以通过SetLength(String,0)释放。如果不释放将在过程(函数)执行完之后自行释放。