在一个流文件中的某个位置有一个长度为32的字符串,现在要把它读出来。我想了3种办法,都编译通过。问题是大家看哪种方法最好?哪种方法存在问题?1------------------------------------------------------------------
var
p : Pointer;
s : string;
p := AllocMem(32);
fs.Read( p^,32 );
s := StrPas( p );2------------------------------------------------------------------
var
p : Pchar;
s : string;
p := StrAlloc(32);
fs.Read( p^,32 );
s := StrPas( p );3------------------------------------------------------------------
var
p : array[0..32]of char;
s : string;
fs.Read( p[0],32 );
s := p;
var
p : Pointer;
s : string;
p := AllocMem(32);
fs.Read( p^,32 );
s := StrPas( p );2------------------------------------------------------------------
var
p : Pchar;
s : string;
p := StrAlloc(32);
fs.Read( p^,32 );
s := StrPas( p );3------------------------------------------------------------------
var
p : array[0..32]of char;
s : string;
fs.Read( p[0],32 );
s := p;
解决方案 »
- 在跨单元的线程中调用设置pagecontrol1.ActivePageIndex问题
- delphi判断richedit中当前输入法
- delphi登录窗口的问题
- 怪事年年有,今年特别多。ComboBox的OnSelect为什么捉不到SelText????
- 二进制流如果转换为MIME????
- 如何用程序判断一个windows 服务是否已经启动?急!!!
- chart如何动态改变坐标?
- 请教STRING类型做为numeric数据类型字段的查询条件,(在线等候!!)
- 物归原主,散分5000,一天后结贴,no.9
- 一个重要问题,高分求救……100分送上。
- 深夜请教:偶用TClientDataSet.ApplyUpdates 来更新数据表的,大虾赐教:
- 一个错误提示?谁能解决?
var
s: String;
begin
SetLength(s, 32);
fs.Read(s[1], 32);
...
例如流中的字符串是'xxxxxxxx',转换后成了'xxxxxxxx S:'我想这是因为PChar是以NULL结尾的字符串,执行StrPas函数时系统无法确定p的长度。可问题是为什么有的时候转换的结果又是正确的呢?
超越水晶报表,是我们的目标
特别适合用于轻松快速解决大量报表的情形
彻底解除程序员负担,极大提高用户设定灵活性
经过了10000行以上数据的压力测试,性能优良!其中一部分功能如下:
1.支持资料卡(比如:个人简历),表单(比如:销售定单),报表(比如:销售月报表)的预览打印
2.不用任何设定,就可以默认产生专业的页面
3.用户可以一次性设定企业标准样式(比如:公司标志,台头)
4.支持文本,线条,方框,图片,等报表元素
5.对各报表元素和报表区域等提供丰富的属性
6.用户可以在运行期间编辑文本,线条,方框,图片,明细列, 操作简单
7.支持同一列相同数据合并成一个格
8.可以在运行期间增删,调换明细列
9.提供多种报表风格
10.支持页合计,总计
11.支持的套打报表
12.支持MIS开发的各种开发工具:如VC、VB、Delphi等
13.可以直接连接数据库
14.用户可以把设定后的报表样式保存为报表样式文件
15.报表头和报表尾均可多于一页
16.报表样式文件格式完全开放
17.可以实现中国式复杂报表样式
18.无须编程请发EMAIL给[email protected]
var i:integer;
s:string;
begin
s:='hello'+#0#0#0#10;
copymemory(@i,@s[6],4);//具体参数顺序看帮助
//这更能说明第三点。
end;
p := AllocMem(32 * sizeOf(char));
我为了演示才省略了内存释放。To 楼上各位:
感谢大家,结贴了!本来想等RealLike用ASM给解释一下为什么第一、二种办法有时会出现问题,现在想来必要性也不大了,我猜测可能是因为PChar是以NULL结尾的字符串,系统无法确定p的长度,一直找到NULL为止,结果越界了。
p : PChar;
a : array[0..255]0f Char;
s : String; s := p;
s := a;
我想知道在s := a;背后Delphi作了些什么?
RealLike快来,再出200分等你来拿!另,哪位仁兄给解释一下字符数组转化为String的内部机制同样给200分!