我有一个指向未知长度缓冲区的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
是一个自定义副本,逐字节,解决方案吗?
答案 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,则输出将为空。如果你想要其他行为,请为它做一个特例。