【发布时间】:2021-06-25 23:14:45
【问题描述】:
我正在努力学习 C++。有时我对 C 风格的字符串及其函数感到困惑。我一直在用
char var[1];
fflush(stdin);
gets(var);
将字符串写入 char 数组。我不知道那是不是最有效的方法,但我就是这样被教导的。
现在,我正在制作一个控制台程序,在该程序中我以这种方式读取一些变量并使用它们进行操作。一切正常,但我有一个 char 数组 estudios[1] ,我必须将它与 strcmp (我不是在谈论 strcmp(estudios, "N") != 0 我在下面写的)比较一个特定的值我发现无论 estudios 的价值如何,比较的结果总是相同的。我意识到在这段代码之后:
if (strcmp(estudios, "N") != 0){
cout << "Estudios completos o incompletos?" << endl;
fflush(stdin);
gets(indicador);
}
假设 estudios 的值为“P”。在代码之前,我显示 estudios 的值是“P”,但在它之后将其值更改为“”。更准确地说,它在gets(indicator)之后发生变化; 为什么会这样?它应该这样做吗?抱歉问了这么一个新手问题
【问题讨论】:
-
char var[1];最多可以存储 0 个字符的字符串。不要使用gets(),它具有不可避免的缓冲区溢出风险,在 C99 中已弃用并从 C11 中删除。使用 C++ 时,您应该使用std::getline()和std::string。 -
另外,永远不要使用
fflush(stdin);。它可能似乎适用于某些系统,但它是未定义的行为。fflush函数专为输出流而设计。 -
“这就是我被教导的方式。”谁教的?解雇坏老师!
-
The man page for
gets字面意思是“从不使用gets()”。如果告诉你如何使用某物的文档说永远不要使用它,并且说在过去的几十年里,你真的不得不怀疑教授是什么时候被教的,以及他们跟上的认真程度。 -
哈哈现在我不知道该怎么做,这就是我的教授要我们使用的:/我猜他根本不在乎,因为他还告诉我们使用 getch() 我读过它也不应该使用。
标签: c++ char c-strings chararray