2011-01-20 29 views
0

如果你有这样的:在C++中用NULL定长字符数组构造左填充的最高性能方法是什么?

char buf[10]; 

,并需要建立像一个函数:

void pad(char* dest, const char* src, size_t destlen, size_t srclen); 

所以pad(dest, "hello", 10, 5)将导致"hello\0\0\0\0\0"

我不知道什么是最有效的方法这样做是使用gcc 4.x:

snprintf然后bzero

operator<<setfill和朋友然后memcpy

性能对于这种特殊情况很重要。提前致谢!

+1

“我不知道是什么做的最有效的方法这是。”试试看看哪一个更快? – 2011-01-20 20:59:57

+1

绝对不是iostreams :-) – 2011-01-20 21:03:14

回答

2

您可以使用memcpymemset

void pad(char* dest, const char* src, size_t destlen, size_t srclen) 
{ 
    memcpy(dest, src, srclen); 
    memset(dest+srclen, '\0', dstlen - srclen); 
} 
当然

,你还应该检查你能适应srcdst

3

memcpy后跟memset

void pad(char* dest, const char* src, size_t destlen, size_t srclen) 
{ 
    memcpy(dest, src, srclen); 
    memset(dest + srclen, 0, destlen - srclen); 
} 
+0

你输入它比我快50秒:D – Elalfer 2011-01-20 21:01:32

相关问题