结论:strcpy效率比sprintf高很多,但是sprintf功能更加强大。
测试代码如下:
//头文件很多是多余的,呵呵。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/time.h>
int main(int argc, char **argv)
{
struct timeval tpstart,tpend;
char user[]="user=";
char pass[]="pass=";
char totalstr[50]="";
int i;
if(argc!=3)
{
printf("Usage:test username password/n");
exit(0);
}
gettimeofday(&tpstart,0);
#if 1 //比较测试开关
for(i=0;i<1000;i++)
{
memset(totalstr,'/0',sizeof(totalstr));
sprintf(totalstr,"%s%s,and%s%s/n",user,argv[1],pass,argv[2]);
}
#else
for(i=0;i<1000;i++)
{
memset(totalstr,'/0',sizeof(totalstr));
strcpy(totalstr,user);
strcpy(totalstr,argv[1]);
strcpy(totalstr,pass);
strcpy(totalstr,argv[2]);
}
#endif
gettimeofday(&tpend,0);
printf("%f/n",(double)(1000000*(tpend.tv_sec-tpstart.tv_sec)+(tpend.tv_usec-tpstart.tv_usec)));
}
具体内容太简单,就不解释了。用test allen 888888测试
开关#if 1打开调用sprintf函数时在我的电脑上测试了下,用时是600多us
开关#if 0打开调用strcpy函数时在我的电脑上测试了下,用时是100us左右
效率居然相差6倍,Why?