我有这个代码,应该将大写字母更改为小写字母:
void tolower(char *text)
{
_asm
{
mov esi, text;
mov ecx, 0;
mov bl, 32;
opakuj:
cmp [esi + ecx], 0;
je konec;
cmp [esi + ecx], 97;
jbe dolower;
add ecx, 1;
jmp opakuj;
dolower:
mov [esi + ecx], bl;
add ecx, 1;
jmp opakuj;
konec:
}
}
mov [esi + ecx], bl
不起作用。我得到了
访问违规写入错误
我做错了什么?
P.S。:我不能使用另一个数组或指针或类似的东西。我必须重写那个字符。
答案 0 :(得分:2)
一种解决方案是分别使用0x20
(大写)或AND
(小写)来隔离小写字符和清除或设置位OR
,如本SO答案中所述:"How to access a char array and change lower case letters to upper case, and vice versa"。
void tolower(char *text)
{
_asm
{
mov esi, text;
mov ecx, -1;
opakuj:
inc ecx;
cmp [esi + ecx], 0; // end of string
je konec;
cmp [esi + ecx], 65; // lower bound for uppercase chars
jb opakuj;
cmp [esi + ecx], 90; // upper bound for uppercase chars
ja opakuj;
; and [esi + ecx], 223; // 11011111 binary - sets uppercase
or [esi + ecx], 32; // 00100000 binary - sets lowercase
jmp opakuj
konec:
}
}
答案 1 :(得分:0)
将var response = vc.Request("/me/videos", "POST", false, "type=pull&link=http://someserver.com/156755.mp4");
更改为mov [esi + ecx], bl
会更正错误。
但是你的程序仍然不健全。 (例如,如果输入是数字字符,该怎么办?)