0
char arr[100];
cin.get(arr,100);
  1. Is this safe? Will the null-character be appended at the end even if I type more than 100 chars? or should I use cin.get(arr,99)?
  2. When I type ENTER, is the end-of-line character part of the array or not?
4

2 回答 2

2

您的两个问题的答案都可以在这里找到,但重申一下:

  1. get方法最多读取n - 1字符。这意味着该方法需要缓冲区的大小而不是要读取的字符数。此方法自动在末尾附加一个空字符。

  2. 换行符不会被提取或存储在数组中。

您可能还需要考虑使用std::getline可以与std::string.

于 2012-04-25T23:48:49.237 回答
1

1)这安全吗?我的意思是最后会附加空字符。即使我输入了超过 100 个字符。或者它必须是 cin.get(arr,99)。

取自这里

您正在使用的签名get如下所示:

basic_istream& get( char_type* s, std::streamsize count );

它将count - 1从流中读取最多字符(在您的情况下为 99)或直到分隔字符,默认情况下为\n. 因此,如果您键入的字符超过 100 个,则调用get将读取其中的 99 个字符,然后\0在末尾附加空终止符。

2)当我输入 ENTER 时,也会传递一个换行符。所以这个字符是否真的是数组的一部分。

不,get一直读到定界字符,所以如果按 ENTER,\n将留在流中作为下一个要读取的字符。

建议:请使用我链接到的站点以了解这些功能的工作原理,以及std::string是否std::getline使用 C++ 编码。

于 2012-04-25T23:50:24.800 回答