一 原型说明
strcat()为C语言标准库函数,用于字符串拼接。函数原型声明在string.h头文件中:
char *strcat(char *dest, const char *src); |
该函数将参数src所指字符串拷贝到参数dest所指字符串的结尾处(覆盖dest结尾处的' ')并添加' '。其返回值为参数dest所指字符串的起始地址。注意,dest必须有足够的空间来容纳要拷贝的src字符串。
本文将给出strcat函数的几种实现,并比较其执行效率。代码运行环境如下:
二 代码实现
2.1 汇编实现
1 char *AssemStrcat(char *pszDest, const char *pszSrc) 2 { 3 int d0, d1, d2, d3; 4 __asm__ __volatile__( 5 "repne " 6 "scasb " 7 "decl %1 " 8 "1: lodsb " 9 "stosb " 10 "testb %%al,%%al " 11 "jne 1b" 12 : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3) 13 : "0" (pszSrc), "1" (pszDest), "2" (0), "3" (0xffffffff):"memory"); 14 return pszDest; 15 }
2.2 模拟C库
1 char *SimuStrcat(char *pszDest, const char *pszSrc) 2 { 3 char *pszOrigDst = pszDest; 4 5 while(*pszDest) 6 pszDest++; 7 while((*pszDest++ = *pszSrc++) != '