[英]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.