SysUtils.StrCopy、SysUtils.StrECopy

Easter79
• 阅读 654

StrCopy 和 StrECopy 都是复制源 PChar 串到目标 PChar 串, 只是返回值不同;
StrCopy 返回结果的首地址, StrECopy 返回结果的尾(#0)地址.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//一般用法, 看不出 StrCopy 与 StrECopy 的区别
procedure TForm1.Button1Click(Sender: TObject);
var
  arr: array[0..3] of Char; {假如 PChar 长度是 3, 这里数组要大出一个, PChar 最后还有一个 #0}
begin
  StrCopy(arr, 'ABC');
  ShowMessage(arr);    {ABC}
  
  StrCopy(arr, '123');
  ShowMessage(arr);    {123}

  StrECopy(arr, 'ABC');
  ShowMessage(arr);    {ABC}
  
  StrECopy(arr, '123');
  ShowMessage(arr);    {123}
end;

//测试 StrCopy 及其返回值:
procedure TForm1.Button2Click(Sender: TObject);
var
  p1,p2,p3,p: PChar;
begin
  p1 := '123456789';
  p2 := 'ABC';

  p3 := PChar(StringOfChar(#0, 9)); {这里用 StringOfChar 代替了 GetMem}
  
  p := StrCopy(p3, p1);
  ShowMessageFmt('%s, %s', [p3, p]); {123456789, 123456789}

  p := StrCopy(p3, p2);
  ShowMessageFmt('%s, %s', [p3, p]); {ABC, ABC}

  ShowMessageFmt('%s, %s', [p3+4, p+4]); {56789, 56789}
end;

//测试 StrECopy 及其返回值:
procedure TForm1.Button3Click(Sender: TObject);
var
  p1,p2,p3,p: PChar;
begin
  p1 := '123456789';
  p2 := 'ABC';

  p3 := PChar(StringOfChar(#0, 9)); {这里用 StringOfChar 代替了 GetMem}
  
  p := StrECopy(p3, p1);
  ShowMessageFmt('%s, %s', [p3, p]); {123456789, }

  p := StrECopy(p3, p2);
  ShowMessageFmt('%s, %s', [p3, p+1]); {ABC, 56789}
end;


//可以巧妙利用 StrECopy 的返回值:
procedure TForm1.Button4Click(Sender: TObject);
var
  p: PChar;
begin
  GetMem(p, 10);

  StrECopy(StrECopy(p,'12345'), '67890');
  ShowMessage(p); {1234567890}
  
  FreeMem(p);
end;

end.

 
 
 
 
 

 

 

  
  

SysUtils 单元下的公用函数目录


点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Stella981 Stella981
3年前
JavaScript常用函数
1\.字符串长度截取functioncutstr(str,len){vartemp,icount0,patrn/^\x00\xff/,strre"";for(vari
Stella981 Stella981
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k