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之后等待一秒钟,然后所有内容将关闭,而没有任何输出。
屏幕截图是我们老师给我们的,它没有用
您的程序具有未定义的行为。
gets需要一个参数,该参数指向足够的有效内存以读取和存储输入。在您发布的代码中,s1不符合该要求。您使用cin和时也存在类似问题s2。
更重要的是,不再使用gets。由于安全问题,此功能已被弃用。使用std::string和std::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)
有用的读物:必须(应该)避免使用标准库中的哪些函数?