uses SysUtils;
const S: PChar = 'A fUnNy StRiNg'
begin
Canvas.TextOut(5, 10, string(StrLower(S)) + ' ' + string(StrUpper(S)));end;
不要用strcopy来给赋值,
procedure TForm1.Button5Click(Sender: TObject);
var
ps:PAnsiChar ;
begin
ps:='ffffffffff';
ShowMessage(string(StrUpper(ps)));
end;
这什么这两个都不能用?
const S: PChar = 'A fUnNy StRiNg'
begin
Canvas.TextOut(5, 10, string(StrLower(S)) + ' ' + string(StrUpper(S)));end;
不要用strcopy来给赋值,
procedure TForm1.Button5Click(Sender: TObject);
var
ps:PAnsiChar ;
begin
ps:='ffffffffff';
ShowMessage(string(StrUpper(ps)));
end;
这什么这两个都不能用?
解决方案 »
- ServerDDNSRunFlag:=PATControlData.RetCode=$4B4F;这个语句里的:= = 符号怎么解释啊?
- 急!!!!关于视频通讯?在线等。。。。
- 如何使用ZLib单元的方法完成压缩整个目录,并且解压后目录结构不发生变化
- 菜中菜问题,messagebox问题。
- mscomm在delphi怎样发送和接受大于128的数据呢?
- 关于Delphi开发的版本控制问题
- 请问枚举类型变量的缺省值是多少?
- 如何使用Query的append方法,请高手指点
- 小小鸟(急电):用BDE的Table控件,dbGride显示数据其中“删除”按钮想转换成Ado的ADOTable 控制
- 我下载了tinyDB 2.8,需要注册怎么办?
- 一个很菜的问题,有符号的浮点变量?
- 同时连接2台以上数据库服务器
procedure TForm1.Button1Click(Sender: TObject);
var
pxxxxx: pchar;
s: string;
pttttt: PChar;
begin
pubs := 'fff';
s := 'fff'; pxxxxx:= PChar(s);// GetMem(pxxxxx, Length(s) + 1);
// ZeroMemory(pxxxxx, Length(S) + 1);
// StrCopy(@pxxxxx, @s); pttttt := StrUpper(pxxxxx); button1.Caption := pxxxxx;
Caption := pttttt + s;
end;function StrUpper(Str: PChar): PChar; assembler;
asm
PUSH ESI ESI入栈
MOV ESI,Str 字符串地址存入ESI寄存中
MOV EDX,Str 。EDX寄存器中
@@1: LODSB 使ESI地址加一,可能相关的寄存器也有变化,比如AL取了第一个字符的值
OR AL,AL 可能是判断是否为空
JE @@2 如果上一步为空,跳出这个过程
CMP AL,'a' 比如第一个字符是否小于a
JB @@1 小于则回到@@1继续下一个字符
CMP AL,'z' 是否大于z
JA @@1 大于则跳到@@1
SUB AL,20H 到此说明这个字符大于a小于z即为一个小写字母, 给这个字符-20H十进制为-32
MOV [ESI-1],AL 把结果存回到ESI-1中(ESI在上面已经加了1了),在这一步出的错
JMP @@1 跳回去
@@2: XCHG EAX,EDX
POP ESI ESI出栈
end;
的确,在MOV [ESI-1],AL处会报错,如果使用GetMem给pxxxxx分配内在了,或者使用窗体级变量pubs就不会报错