簡體   English   中英

如何在緩沖區末尾添加0x00

[英]How to add 0x00 at the end of a buffer

我有一段代碼:

char* buffer = new char[12];
memcpy(newbuffer, bytes, 10); //bytes is const void *

現在,我希望將未使用的最后2個字節附加0000

我該如何實現?

如此簡單:

buffer[10]=buffer[11]=0;

如果范圍較長,則可以使用memsetstd::fill

使用內存集。

memset(buffer + 10, 0, 2);

在調用memcpy之前初始化整個緩沖區,並為您完成:

char* buffer = new char[12];
memset(buffer, 0, 12);
memcpy(buffer, bytes, 10);

您可以直接分配它們:

buffer[10] = 0;
buffer[11] = 0;

或者,如果您願意,可以將其循環。

只需將它們設置為0。

buffer[10] = buffer[11] = 0;

errr ..

buffer[10] = 0;
buffer[11] = 0;

如果您需要為兩個以上的元素執行此操作:

memset( & buffer[10], 0, 2 );

更通用:

// sets the next n elements of your array of type T
// pointed by pointer to 0.
memset( pointer, 0, n*sizeof(T) );

對於兩個要素,許多人已經建議的簡單解決方案可能會更清晰,更快捷。

由於您使用的是C ++,因此應該避免進行手動內存管理,並使用標准庫功能,例如std::vector 在C ++中幾乎不可能正確地手動管理內存,並且在除少數幾種情況下(例如在低級庫代碼中)幾乎完全必要。

鑒於:

const char* bytes; 
std::size_t n_bytes = 10; 

以下任何一項均可使用:

std::vector<char> buffer(bytes, bytes + n_bytes);
buffer.push_back(0); // null-terminate the buffer

要么:

std::vector<char> buffer(n_bytes + 1);
std::copy(bytes, bytes + n_bytes, buffer.begin());

要么:

std::vector<char> buffer;
buffer.reserve(n_bytes + 1);
std::copy(bytes, bytes + n_bytes, std::back_inserter(buffer));
buffer.push_back(0);

哪個執行效果最好取決於編譯器如何實現std::vector 實際上,除非您以相對較高的頻率創建和銷毀緩沖區,否則您不會注意到可觀的性能差異。 乍看之下,這里介紹的三個解決方案中的第一個是最干凈,最容易理解的。

通過使用std::vector ,您不必擔心自己釋放內存,也不必擔心在異常導致函數提早返回時正確銷毀動態分配的對象。 此外,標准庫容器的良好實現(例如Visual C ++所提供的容器)可以在調試版本中提供運行時檢查,從而幫助您查找常見的錯誤,例如一次性錯誤或迭代器無效錯誤。

另一種方法是在寫入緩沖區之前,先使用memsetstd::fillstd::fill

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM