在C ++中用NULL固定长度字符数组构造左填充的最高效的方法是什么?

时间:2011-01-20 20:54:54

标签: c++ linux gcc low-level

如果你有类似的话:

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

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);
}

当然,您还应该检查src是否适合dst