?错误“在此函数中未初始化使用了s1,s2”

1 c++ string c-strings fgets getline

这是我在编程基础课程的第一堂课后遇到的问题之一

gets()可以正常工作(我认为),但是“ cin”拒绝工作

int main(void)
{
    char *s1, *s2;
    puts("Enter your name and surname for gets()");
    gets(s1);
    puts("Enter your name and surname for cin()");
    cin >> s2;
    cout << s1 << "! Hello from gets" << endl;
    cout << s2 << "! Hello from cin" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望cin输出您在控制台中输入的内容,但是在输入programm之后等待一秒钟,然后所有内容将关闭,而没有任何输出。

屏幕截图是我们老师给我们的,它没有用

屏幕截图

R S*_*ahu 5

您的程序具有未定义的行为。

gets需要一个参数,该参数指向足够的有效内存以读取和存储输入。在您发布的代码中,s1不符合该要求。您使用cin和时也存在类似问题s2

更重要的是,不再使用gets。由于安全问题,此功能已被弃用。使用std::stringstd::getline

int main(void)
{
   std::string s1;
   std::string s2;

   puts("Enter your name and surname");
   std::getline(std::cin, s1);

   puts("Enter your name and surname again");
   std::getline(std::cin, s2);

   // Use s1 and s2.
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

有用的读物​​:必须(应该)避免使用标准库中的哪些函数?