使用gets(a)而不是cin.getline(a,20)的优点是什么?

What is the advantage of using gets(a) instead of cin.getline(a,20)?

本文关键字:是什么 cin gets 使用 getline      更新时间:2023-10-16

必须定义一个数组来存储该字符串。

 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将由空字符(由''表示)占据,该字符将标记字符串的结束。通常,数组中接下来的内容并不重要,并保持过去的方式。以空结尾的字符用于标记字符串的结束位置,因此您可以安全地使用它。