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;
这什么这两个都不能用?
解决方案 »
- 我用的是DELPHI+ACCESS进行开发的小型数据库系统,现在碰到的问题是DBGrid中显示的数据与ACCESS数据不符
- 如何在菜单的左边加一个长方形的图片,就像WINDOWS的开始菜单?
- listview+timer问题?
- 好郁闷,调试任一项目都出错!
- delphi调用sql server的存储过程,老提示错误'@dwmc' not found?
- 请问如何获得汉字拼音首码? -- 急!
- 急阿! 快帮帮忙阿!我做了好久,想不出所以然来
- 想提两个问题,一个是怎么创建动态页面的问题,另一个是时间计算的问题
- 计算字段的问题,求救
- 关闭外部程序,用FindWindow()无法实现,无奈中。
- 一个很菜的问题,有符号的浮点变量?
- 同时连接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就不会报错