我有一個傳入的未初始化字串。我想洗掉“保持”(Keep??????)之后所有未初始化的記憶體字符。這是我的代碼:
#include <windows.h>
#include <conio.h>
int main()
{
WCHAR* sNew = new WCHAR[10];
sNew[0] = 'K';
sNew[1] = 'e';
sNew[2] = 'e';
sNew[3] = 'p';
_getch();
}
我如何實作這一目標?在這個例子中,我知道我想要保留的長度是陣列的前四個元素,但是,我需要將它編碼為不同的長度。
我讀到“?”符號是 Visual Studio 在除錯模式下的默認值,所以在發布模式下它可能是
uj5u.com熱心網友回復:
實際上,我會建議一些事情
- 不要使用像這樣的 C 樣式陣列,而是更喜歡該
string型別,讓編譯器對其進行優化(固定字串為 const)std::string const foo = "bar"; - 通常不會在可能的情況下制造未初始化的記憶體(例如,考慮一個將為您管理分配狀態的向量)
uj5u.com熱心網友回復:
您可以使用 memset 將整個記憶體清零:
WCHAR* sNew = new WCHAR[10];
memset(sNew, 0, 10*sizeof(WCHAR));
如果您將此記憶體用作 c 字串,那么您實際上只需要使用空字符終止該字串。
WCHAR* sNew = new WCHAR[10];
sNew[0] = 'K';
sNew[1] = 'e';
sNew[2] = 'e';
sNew[3] = 'p';
sNew[4] = '\0';
uj5u.com熱心網友回復:
您可以像這樣初始化陣列的所有成員:
#include <windows.h>
#include <conio.h>
int main()
{
WCHAR* sNew = new WCHAR[10]{0}; // Set all members to zero.
WCHAR aNew[10]{0}; // Set all members to zero.
}
uj5u.com熱心網友回復:
方法一
你可以使用std::fill如下圖:
WCHAR* sNew = new WCHAR[10];
std::fill(sNew, sNew 10, 'a'); //i have used `a` as an example you can chose some other character according to your needs/preference
或者如果你想Keep在你的例子中設定字符,你可以這樣做:
WCHAR* sNew = new WCHAR[10];
sNew[0] = 'K';
sNew[1] = 'e';
sNew[2] = 'e';
sNew[3] = 'p';
std::fill(sNew 4, sNew 10, 'a'); //note the 4 used here
方法二
另請注意,您可以初始化陣列的所有元素,如下所示:
WCHAR* sNew = new WCHAR[10](); //note the empty pair of parenthesis
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437749.html
下一篇:如何在運行時在C 中創建引數串列以將其傳遞給模板函式(...,Ts&&...值),如InsertOrUpdateMutationBuilder
