我有这段代码:
#include<iostream>
int main() {
char* name;
std::cout<<"Ingresa tu nombre: \t";
std::cin>>name;
std::cout<<"Tu nombre es: \t"<<name;
return 0;
}
当变量名称为int
类型时,它可以正常工作,但当变量类型为char
时,要存储整个名称,输入时程序会说它已停止工作,并且甚至没有设法在最后cout
中显示名称。
答案 0 :(得分:2)
你正在读取未初始化的字符缓冲区指针的输入,基本上将输入转储到一些随机的内存块中,所以这是未定义的行为,它会崩溃。
您需要在使用之前初始化该缓冲区,或者,此处的C ++解决方案是使用字符串:
std::string name;
自动处理内存管理,不会遇到C固有的缓冲区溢出问题。
答案 1 :(得分:2)
char* name;
是一个指针。它需要指向一些记忆。目前它是未初始化的,所以它可以指向任何地方或任何东西。这意味着当你这样做; std::cin>>name;
它将随机写入您的程序空间,就好像它正在写入缓冲区一样。这是未定义的行为,可能导致任何事情,包括正常工作或崩溃,就像在您的情况下一样。在c ++中,您可以使用std::string
来阅读:
std::string name;
std::cin>>name;