使用gets(a)而不是cin.getline(a,20)的优点是什么?
What is the advantage of using gets(a) instead of cin.getline(a,20)?
必须定义一个数组来存储该字符串。
char[10];
假设我想把smcck
存储在这个数组中。使用gets(a)
的优势是什么?我的老师说,当我们使用cin.getline(a, 20)
时,数组中的额外空间是浪费的,但这也适用于gets(a)
,对吗?
还有一个额外的问题,数组的空"框"中究竟存储了什么?
gets()是一个C函数,它不做边界检查,被认为是危险的,这些年来一直保留它是为了兼容性,而不是其他。
您可以查看以下链接以消除您的疑问:
http://www.gidnetwork.com/b - 56. - html
不要把C的特性和c++混在一起,尽管C的所有特性都可以在c++中工作,但不建议这样做。如果您正在使用c++,那么您可能应该避免使用gets()。使用getline()代替。
嗯,我不认为gets(a)是更好的,因为它不检查字符串的大小。如果尝试使用它读取长字符串,可能会导致缓冲区溢出。这意味着它将使用您为它分配的所有10个空间,然后它将尝试使用为其他变量或其他程序分配的空间(这将导致您的发布崩溃)。
cin.getline()接收一个int作为参数,告诉它读取的字符数不要超过预期的字符数。如果你分配一个只有10个位置的向量并读取20个字符,它将导致与我告诉你的gets()相同的问题。
关于字符串在内存中的表示,如果你把"smcck"放在数组
v char [10],
该单词将占据前5个位置(0到4),位置5将由空字符(由' '表示)占据,该字符将标记字符串的结束。通常,数组中接下来的内容并不重要,并保持过去的方式。以空结尾的字符用于标记字符串的结束位置,因此您可以安全地使用它。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- while(cin)到底是什么意思
- 使用cin.clear的一般用途是什么?
- cin.ignore(1)之间的分歧是什么?和cin.ignore(n)
- cin和cout对象的生命周期是什么?C++
- 使该程序停止的STD :: CIN是什么
- 是什么原因导致字符数从cin不准确和非常大
- 字符串中的 cin>>str+1 是什么C++?
- 在python中,while(cin >> var)的等价物是什么?
- cout和cin不是函数,那么它们是什么呢
- python中cin.ignore()的等价性是什么?
- "cin.exceptions"和"exception"在这里是什么意思
- in(std::cin):它是什么意思
- 虽然中的"cin >>变量"是什么意思?
- 我想知道什么是While(cin)测试
- 使用gets(a)而不是cin.getline(a,20)的优点是什么?
- "<<" 和 ">>" 在 cout/cin 的C++中是什么意思?
- c++中的cin运算符顺序是什么?
- C++ - 在 std::cin.getline() 中使用 'dot' 运算符是什么意思?