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

发布于 2024-10-13 02:32:12 字数 466 浏览 3 评论 0原文

如果你有类似的东西:

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

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

If you have something like:

char buf[10];

and need to create a function like:

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

so pad(dest, "hello", 10, 5) will result in "hello\0\0\0\0\0"

I'm not sure what the most efficient way of doing this is using gcc 4.x:

snprintf then bzero?

operator<< with setfill and friends then memcpy?

Performance is important for this particular case. Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

春风十里 2024-10-20 02:32:12

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);
}

How about memcpy followed by memset?

void pad(char* dest, const char* src, size_t destlen, size_t srclen)
{
    memcpy(dest, src, srclen);
    memset(dest + srclen, 0, destlen - srclen);
}
明媚如初 2024-10-20 02:32:12

您可以使用 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

You can use memcpy and memset like

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

of course you should also check that you can fit src into dst

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文