使用cout / cin时为什么c ++代码中的错误?

时间:2018-03-02 02:31:49

标签: c++

我有这段代码:

#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中显示名称。

enter image description here

2 个答案:

答案 0 :(得分:2)

你正在读取未初始化的字符缓冲区指针的输入,基本上将输入转储到一些随机的内存块中,所以这是未定义的行为,它会崩溃。

您需要在使用之前初始化该缓冲区,或者,此处的C ++解决方案是使用字符串:

std::string name;

自动处理内存管理,不会遇到C固有的缓冲区溢出问题。

答案 1 :(得分:2)

char* name;是一个指针。它需要指向一些记忆。目前它是未初始化的,所以它可以指向任何地方或任何东西。这意味着当你这样做; std::cin>>name;它将随机写入您的程序空间,就好像它正在写入缓冲区一样。这是未定义的行为,可能导致任何事情,包括正常工作或崩溃,就像在您的情况下一样。在c ++中,您可以使用std::string来阅读:

std::string name;
std::cin>>name;