Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:";未初始化的局部变量';名称';“用过的”;在C++;使用字符*_C++_String_Pointers_Char - Fatal编程技术网

C++ 错误:";未初始化的局部变量';名称';“用过的”;在C++;使用字符*

C++ 错误:";未初始化的局部变量';名称';“用过的”;在C++;使用字符*,c++,string,pointers,char,C++,String,Pointers,Char,我编写了以下代码片段: int main() { char *name; cin >> name; return 0; } 编译后,它给出的错误为:“未初始化的局部变量‘name’used”。我不明白为什么会这样。请解释我的问题是什么 谢谢。char*是一个指向char的指针,目前它并没有“指向”任何地方。您可以分配一些内存并指向那个 char* name = new char[64]; cin >> name; delete[] name;

我编写了以下代码片段:

int main()
{
    char *name;
    cin >> name;

    return 0;
}
编译后,它给出的错误为:“未初始化的局部变量‘name’used”。我不明白为什么会这样。请解释我的问题是什么


谢谢。

char*
是一个指向
char
的指针,目前它并没有“指向”任何地方。您可以分配一些内存并指向那个

char* name = new char[64];
cin >> name;
delete[] name;

但是,您可以通过使用
std::string
来避免此要求。请看这里的一些示例:

除非为
名称分配内存,否则您正在向未初始化的指针写入

试试这个:

#include <iostream>

int main()
{
    char *name = new char[100];
    std::cin >> name;
    delete [] name;
    return 0;
}
#包括
int main()
{
字符*名称=新字符[100];
std::cin>>名称;
删除[]名称;
返回0;
}

名称
未初始化,您正在使用它吗?我不理解这种混乱。此外,这是即时segfault。
cin>>name
指示输入流读取字符串并将其存储在
name
指向的内存中。在你的代码中,<代码> No.<代码>没有指向任何内存。这显然是C++,而不是C。它们不是同一种语言——请使用适当的标签。@ DeiDei,你希望这是一个瞬间的分段错误,但实际上,这些东西可以一直保持安静直到你向你的老板演示。措辞是误导的。分配内存并不能解决指针未初始化的直接问题。分配一个值(可能需要也可能不需要分配内存)。如果他试图从
std::cin
写入,他需要分配内存-如果他只是给
char*
指针分配了一个字符串文字,它将是只读内存“如果他试图从std::cin写入,他需要分配内存”-否。您需要一个有效的指针。这并不意味着分配内存,例如
char缓冲区[100];字符*名称=&缓冲区[0]将有效指针指定给
名称
,而不分配内存。分配有效值是这里的关键点。