Каков наиболее эффективный способ создания массива символов с фиксированной длиной NULL в C ++? - PullRequest
0 голосов
/ 20 января 2011

Если у вас есть что-то вроде:

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 ]

3 голосов
/ 20 января 2011

Как насчет 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);
}
2 голосов
/ 21 января 2011

Вы можете использовать memcpy и memset, как

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

...