簡體   English   中英

C/C++ 初始化字符指針

[英]C/C++ Initialize Char Pointer

我想我出於某種原因對如何初始化 char 指針值感到困惑。 也許我想多了。 我在名為 Login.h char *arg1; 的 header 文件中有這個。

我收到一個警告,成員變量未在此構造函數中初始化。 所以在 Login.cpp 我放:

Login::Login() {
    // TODO Auto-generated constructor stub
    arg1 = (char *)malloc(50); 
    //arg1 = new char();
    //arg1 = nullptr;

}

有什么區別:

arg1 = (char *)malloc(50);
arg1 = new char(50);

當我嘗試下面的代碼時,我得到不兼容的類型。

arg1 = 'A';

我想我對初始化指針和普通變量感到困惑

我應該這樣做嗎?

arg1 = nullptr;

希望有人能幫我澄清一下,謝謝。

假設arg1被解釋為字符串,除了其他好處之外,這將使編譯器感到高興:

Login::Login() {
    // TODO Auto-generated constructor stub
    arg1 = (char *)malloc(50); 
    arg1[0] = '\0';
}

現在arg1是一個正確的 null 終止的字符串。 它本質上是一個空字符串。 如果沒有 that = '\0'初始化程序,arg1 是指向已分配但未初始化的 memory 的指針。 最初,在此更改之前,不能保證在分配的 50 字節數組中存在 null 終止符。 任何嘗試對該字符串的內容進行strcpy操作都會導致未定義的行為,因為復制代碼可以通過數組邊界尋找不存在的 null 字符。

還有兩件事要考慮。 為什么不將arg1聲明為char arg1[50]類型或std::string arg1類型。 然后你不必擔心釋放 memory 並且你的類的默認復制構造函數會做正確的事情。

暫無
暫無

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

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