繁体   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