使用gets(a)而不是cin.getline(a,20)有什么好处?

时间:2015-09-10 03:58:09

标签: c++ arrays string

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

 char[10];

因此假设我想在此数组中存储smcck。使用gets(a)有什么好处?我的老师说,当我们使用cin.getline(a, 20)时,阵列中的额外空间会被浪费,但是这也适用于gets(a)吗?

还只是一个额外的问题,究竟是什么存储在数组的空“框”中?

1 个答案:

答案 0 :(得分:0)

好吧,我不认为获取(a)是更好的,因为它不会检查字符串的大小。如果您尝试使用它读取长字符串,则可能导致缓冲区溢出。这意味着它将使用您为其分配的所有10个空格,然后它将尝试使用为其他变量或其他程序分配的空间(这会使您的发布崩溃)。

cin.getline()接收一个int作为参数,告诉它不要读取超过预期的字符数。如果你分配一个只有10个位置的矢量并读取20个字符,那么我会告诉你关于gets()的相同问题。

关于内存中的字符串表示,如果你把" smcck"在阵列上

char v [10];

该单词将取前5个位置(0到4),位置5将由空字符(由' \ 0'表示)采用,这将标记字符串的结尾。通常,数组中接下来的内容无关紧要,并且保持其过去的状态。空终止字符用于标记字符串结束的位置,因此您可以安全地工作。