我如何处理有关输入的字符串大小超过字符数组设置大小的错误?

How I can handle with error about entered size of string exceeds the set size of char array?

本文关键字:字符 数组 错误 设置 何处理 字符串 处理 输入      更新时间:2023-10-16

如果我输入的字符串大于设置的大小,我需要某种错误处理程序。

cout << "Enter long of the string" << endl;
cin >> N;
char* st = new char[N];
char* st1 = new char[N];
for (int i = 0; i < N; ++i) {
*(st1 + i) = ' ';
}
cout << "Enter string in the end put 0,without whitespace in the end." << endl;
cin.getline(st, N, '0');

首先是一些评论。

  • 不要在C++中使用 C 样式数组(如char data[N](
  • 始终对字符串使用std::string
  • 切勿对字符串使用char数组
  • 永远不要在C++中使用原始指针作为拥有的内存
  • Neally从不使用newC++
  • 避免将指针算法与指向拥有内存的原始指针一起使用

所以,你应该重新考虑你的设计。首先开始正确执行。

回答您的具体问题:如果您阅读了 getline 的文档,那么您可以看到

计数-1 字符已被提取(在这种情况下,执行 setstate(failbit(。

因此,将设置故障位。你可以检查一下

if (std::cin.rdstate() == std::ios_base::failbit)

但正如您也可以在文档中阅读的那样

从流中提取字符,直到行尾或指定的分隔符 delim。

因此,正如您所期望的那样,它将不起作用,它将尝试读取直到读取 0。我认为这对你不起作用。

您还需要删除新内存。否则,您将创建一个内存漏洞。再看你的例子,试试看:

#include <iostream>
int main() {
size_t N;
std::cout << "Enter maximum length of the stringn";
std::cin >> N;
char* st = new char[N];
char* st1 = new char[N];
for (size_t i = 0U; i < N; ++i) {
*(st1 + i) = ' ';
}
std::cout << "Enter string in the end put 0, without whitespace in the end.n";
std::cin.getline(st, N, '0');
if (std::cin.rdstate() == std::ios_base::failbit) {
std::cin.clear();
std::cout << "nError: Wrong string enterednn";
}
delete[] st;
delete[] st1;
return 0;
}

解决所有问题:使用std::stringstd::getline