给定(在 C++ 中)
char * byte_sequence;
size_t byte_sequence_length;
char * buffer;
size_t N;
假设 byte_sequence
和 byte_sequence_length
被初始化为一些任意长度的字节序列(及其长度),并且 buffer
被初始化为指向N * byte_sequence_length
字节,将byte_sequence
复制到buffer
N
次最简单的方法是什么? STL/BOOST 中是否已经有类似的功能?
例如,如果序列是“abcd”,N
是 3,那么 buffer
最终将包含“abcdabcdabcd”。
最佳答案
我可能会这样做:
for (int i=0; i < N; ++i)
memcpy(buffer + i * byte_sequence_length, byte_sequence, byte_sequence_length);
这假设您正在处理二进制数据并跟踪长度,而不是使用 '\0'
终止符。
如果您希望这些是 C 字符串,您必须分配一个额外的字节并在结尾处添加 '\0'
。给定一个 C 字符串和一个整数,你想这样做:
char *RepeatN(char *source, size_t n)
{
assert(n >= 0 && source != NULL);
size_t length = strlen(source) - 1;
char *buffer = new char[length*n + 1];
for (int i=0; i < n; ++i)
memcpy(buffer + i * length, source, length);
buffer[n * length] = '\0';
}
关于c++ - 在 C++ 中将字节序列重复到更大缓冲区的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640518/