能力值:
( LV2,RANK:10 )
|
-
-
2 楼
strcat?
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
C是指针, 指针相加有何意义?
没考虑溢出
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我不是说明需要自己分配一个足够的缓冲区吗,不是指针相加,而是把两个字符串连起来,生成一个新字符串
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
对,就是那个,我要在dll里面用那函数,而且还要把那个dll注入到一个游戏进程,结果只要用那个函数,游戏百分百崩溃
|
能力值:
( LV5,RANK:70 )
|
-
-
6 楼
strcat易发生溢出啊,可以用strncat。
另外,LZ你不知道汇编有专门的串操作指令吗?谁敢用你这代码也是堪忧啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
当然知道,但是你不知道字符串的长度,所以每个字符都要取出来看看是不是零,才知道有没有到字符串的末尾,所以不能用串操作符
|
能力值:
( LV13,RANK:388 )
|
-
-
8 楼
你先求长度,然后rep movsb
可以看看vc编译器strcpy的反汇编
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
长度也需要遍历才能出来吧,既然都要遍历,何必多用一个rep movsb
?
|
能力值:
( LV9,RANK:320 )
|
-
-
10 楼
鼓励一下......另说,c++的string也挺方便的:)
|
能力值:
( LV5,RANK:70 )
|
-
-
11 楼
虽然同样是遍历,但是内置的指令应该比你的循环要高效,这个跟CPU的设计有关。
我写的一个strcat,你参考一下。
void __stdcall StringCat(char* pStrOrigin, char* pStrAppend){
_asm{
;计算附加串长度,存放到ebx
mov edi, pStrAppend
xor eax,eax
or ecx, -1
repne scasb
not ecx
mov ebx, ecx
;还原附加串地址,并保存到esi(串指令的源串地址)
sub edi, ecx
mov esi, edi
;将目标指针移动到原始串末尾
mov edi, pStrOrigin
or ecx, -1
repne scasb
dec edi
;对齐字节拷贝;4字节对齐
mov ecx, ebx
shr ecx, 2
rep movsd
;剩余单字节拷贝
mov ecx, ebx
and ecx, 3
rep movsb
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
还好,多谢指教,
|
|
|