重复缓冲区而避免指针算术:
您可以使用std::vector<char>或std::string来使事情更容易。这两个容器也可以保存二进制数据。
此解决方案具有以下良好特性:
- 您不需要担心内存访问违规
- 您不需要担心获取正确的缓冲区大小
- 您可以随时将序列附加到您的缓冲区,而无需手动重新分配
.
void appendSequenceToMyBuffer(std::string &sBuffer
, const char *byte_sequence
, int byte_sequence_length
, int N)
{
for(int i = 0; i < N; ++i)
sBuffer.append(byte_sequence, byte_sequence_length);
}
备选方案:使用memcpy处理二进制数据:
buffer = new char[byte_sequence_length*N]
for (int i=0
memcpy(buffer+i*byte_sequence_length, byte_sequence, byte_sequence_length)
//...
delete[] buffer
替代方法:对于使用strcpy的空终止字符串数据:
buffer = new char[byte_sequence_length*N+1];
int byte_sequence_length = strlen(byte_sequence);
for (int i=0; i < N; ++i)
strcpy(buffer+i*byte_sequence_length, byte_sequence, byte_sequence_length);
//...
delete[] buffer;
替代方案:如果您要使用单个值填充缓冲区:
buffer = new char[N];
memset(buffer, byte_value, N);
//...
delete[] buffer;