Most of the times developers are believe that sprintf is the most performance method for string copy.
But I did some small test and result as fallow.
Environment : windows 7
IDE : visual studio 2010
Programing language: Visual C++
Method: Get the current system time. Copied the 100 length strings to specific char buffer 100,000,000 times continually. Get the current system time and check the time different.
Result: following table showing the result time for each function . So as conclusion strcpy is the most fastest string copy function.
Environment : windows 7
IDE : visual studio 2010
Programing language: Visual C++
Method: Get the current system time. Copied the 100 length strings to specific char buffer 100,000,000 times continually. Get the current system time and check the time different.
Result: following table showing the result time for each function . So as conclusion strcpy is the most fastest string copy function.
Test
|
sprintf
|
strcpy
|
strncpy
|
strcpy_s
|
Test - 1
|
0 : 26 :
016
|
0 : 0 :
261
|
0 : 0 :
271
|
0 : 2 :
563
|
Test - 2
|
0 : 25 :
874
|
0 : 0 :
260
|
0 : 0 :
270
|
0 : 2 :
529
|
Test - 3
|
0 : 25 :
909
|
0 : 0 :
260
|
0 : 0 :
270
|
0 : 2 :
532
|
Test - 4
|
0 : 25 :
905
|
0 : 0 :
260
|
0 : 0 :
270
|
0 : 2 :
548
|
Test - 5
|
0 : 26 :
017
|
0 : 0 :
260
|
0 : 0 :
269
|
0 : 2 :
531
|
Test - 6
|
0 : 25 :
917
|
0 : 0 :
260
|
0 : 0 :
270
|
0 : 2 :
547
|
Test - 7
|
0 : 25 :
930
|
0 : 0 :
260
|
0 : 0 :
271
|
0 : 2 :
533
|
Test - 8
|
0 : 25 :
914
|
0 : 0 :
261
|
0 : 0 :
269
|
0 : 2 :
535
|
Test - 9
|
0 : 25 :
879
|
0 : 0 :
261
|
0 : 0 :
272
|
0 : 2 :
533
|
Test - 10
|
0 : 25 :
898
|
0 : 0 :
260
|
0 : 0 :
271
|
0 : 2 :
524
|
#include <windows.h>
#include <stdio.h>
#include <time.h>
void getDef(SYSTEMTIME t1, SYSTEMTIME t2, char name[]){
SYSTEMTIME temp;
if(t1.wMilliseconds < t2.wMilliseconds)
{
temp.wMilliseconds = t2.wMilliseconds - t1.wMilliseconds;
}else if(t1.wMilliseconds > t2.wMilliseconds)
{
temp.wMilliseconds = t2.wMilliseconds - t1.wMilliseconds + 1000 ;
if(t2.wSecond == 0)
{
t2.wMinute = t2.wMinute - 1;
t2.wSecond = 59;
}else
{
t2.wSecond = t2.wSecond - 1;
} }else
{
temp.wMilliseconds = 0;
} if(t1.wSecond < t2.wSecond)
{
temp.wSecond = t2.wSecond - t1.wSecond;
}else if(t1.wSecond > t2.wSecond)
{
temp.wSecond = t2.wSecond - t1.wSecond + 60;
t2.wMinute = t2.wMinute - 1;
}else{
temp.wSecond = 0;
} if(t1.wMinute < t2.wMinute)
{
temp.wMinute = t2.wMinute - t1.wMinute;
} else if(t1.wMinute == t2.wMinute)
{
temp.wMinute = 0;
} printf("Def %s %d : %d : %d\n",name, temp.wMinute,temp.wSecond,temp.wMilliseconds);
}
void main(){
char buffer [105];
SYSTEMTIME st,st2;
for (int j = 1; j < 11; j++)
{
GetLocalTime(&st);
for(int i=0; i< 10000000; i++)
{
sprintf (buffer, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.");
}
GetLocalTime(&st2);
getDef(st,st2, "sprintf");
GetLocalTime(&st);
for(int i=0; i< 10000000; i++)
{
strcpy (buffer, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.");
}
GetLocalTime(&st2);
getDef(st,st2, "strcpy");
GetLocalTime(&st);
for(int i=0; i< 10000000; i++)
{
strncpy (buffer, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.",100);
}
GetLocalTime(&st2);
getDef(st,st2,"strncpy");
GetLocalTime(&st);
for(int i=0; i< 10000000; i++)
{
strcpy_s (buffer, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.");
}
GetLocalTime(&st2);
getDef(st,st2,"strcpy_s");
}
scanf ("%s",buffer);
}