我在C中编写循环缓冲区的代码,但是当写入包装时,我很难将输入写入缓冲区。
我从用户输入一个数据块,包括数字,字符串,空字符,任何东西,并将其写入缓冲区。当写指针到达指针的末尾时,它将换行到顶部并开始从那里写入数据。所以要做到这一点,我想分割块数据,以便将一半数据写入写指针的底部,剩下的数据将从顶部写入。
我无法拆分这些数据。有什么办法吗?
编辑:我用来编写数据的代码。
if (length > circular_buffer_available_space_bottom(cb)) {
/* copy data in the buffer till the end */
memcpy(circular_buffer_ends_at(cb), data, space_bottom);
/* Move the rear pointer to the next write location */
cb->rear = (cb->rear + space_bottom) % cb->length;
/* Calculate space available at top of the buffer */
space_top = length - space_bottom;
/* copy remaining data in available space at the top */
memcpy(circular_buffer_ends_at(cb), data,space_top);
/* Move the rear pointer to the next write location */
cb->rear = (cb->rear + space_top) % cb->length;
}
这里,首先检查输入数据的长度。 因此,当数据写在底部时,它应该被分割,剩下的数据需要写在顶部,这是在第二个memcpy()中。
现在,我没有拆分数据,我正在寻找一种方法来拆分它。 此代码会给我错误,因为可用空间将少于所需空间。