将前n个字符复制到std :: string

时间:2016-11-24 16:44:31

标签: c++

我有一个指向未知长度缓冲区的char指针:

char* buffer;

如果N!= 0,我需要将第一个N(N是输入变量)字符复制到std :: string。 我目前的代码是:

int N = <something>;
std::string text;
if (N != 0)
    text.assign(buffer, N);
else
    text.assign(buffer);

我不喜欢的是,当缓冲区的大小小于N时,结果文本的大小为N.

标准库中是否有任何函数将缓冲区的前N个字符复制到文本而不强制文本大小为N?

即如果缓冲区只有1个字符且N = 100,我想要text.size()= 1

是一个自定义副本,逐字节,解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以使用memchr查找零字节,并将搜索范围限制为N个字节:

size_t N = ...;
char* pos = memchr(buffer, '\0', N);
text.assign(buffer, pos ? pos - buffer : N);

如果找不到该字节,则输出字符串的长度应为N.如果找到,则memstr返回指向它的指针。减去原始指针将产生所需的长度。

这不会以任何特殊方式处理N = 0的情况 - 也就是说,如果N为0,则输出将为空。如果你想要其他行为,请为它做一个特例。