閺€鎯版 (0) +1 鐠э拷 (0) +1 闊拷 (0) +1
閺€鎯版閹存劕濮�閺屻儳婀呴弨鎯版>>

正在阅读:VC++学习:字符串黑箱的背后VC++学习:字符串黑箱的背后

2004-03-01 10:18 出处:CSDN 作者:titilima 责任编辑:linjixiong

  lstrcat(lpDst, szByte);
  }
  // 处理最后一个字节
  wsprintf(szByte, "%02X", lpbySrc[i]);
  lstrcat(lpDst, szByte);
  free(lpbySrc);
  lpbySrc = NULL;
  CloseHandle(hFileSrc);
  // 保存到目标文件
  hFileDst = CreateFile(szFileDst, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
  WriteFile(hFileDst, (LPCVOID)lpDst, lstrlen(lpDst) * sizeof(TCHAR), &dwReaded, NULL);
  free(lpDst);
  lpDst = NULL;
  CloseHandle(hFileDst);
  }
  当把这段代码拉上阵的时候,我发现虽然它可以正常工作,结果也是我想要的,但是它处理文件的速度慢得出奇,甚至文件的大小相差几十K都会有明显的速度差距!我再次浏览了一遍我的代码,还是没有发现什么致命的错误。我灵机一动,心想还好我用的是GUI界面,于是我没费多少力气,在这个线程中加了几行代码和一个Progress Bar,继续编译运行。
  这次的结果出来了,我发现指示字节处理进度的那个Progress Bar越往后走进展速度越慢。我恍然大悟,打开了VC附带的strcat源码:
  char * __cdecl strcat (char * dst, const char * src)
  {
  char * cp = dst;

  while( *cp )
  cp++; /* find end of dst */

  while( *cp++ = *src++ ) ; /* Copy src to end of dst */
 
  return( dst ); /* return dst */

  }
  这个过程很明了,先查找字符串末尾的结束符,然后再进行字符串的复制。那么在我的代码中,每完成一次循环,lstrcat就要不厌其烦地去寻找一遍结束符,然后再进行复制——这也就造成了很多无用功,也就是Progress Bar越走越慢的原因。

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
閹靛婧€鐠佸潡妫�閸ョ偛鍩屾い鍫曞劥