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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何处理有关输入的字符串大小超出字符数组设置大小的错误?相关的知识,希望对你有一定的参考价值。

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

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 ++中对原始内存使用原始指针
  • 绝对不要在C ++中使用new
  • 避免使用带有指向拥有的内存的原始指针的指针算法

因此,您应该重新考虑您的设计。首先请正确开始。

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

count-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 string\n";
    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 entered\n\n";
    

    delete[] st;
    delete[] st1;
    return 0;


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


以上是关于如何处理有关输入的字符串大小超出字符数组设置大小的错误?的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIKeyCommand 时如何处理大小写字符

Vigenere密码,如何处理超出字符值范围的序数值

查询时如何处理db中随机字母大小写实例?

[IT学习]Python如何处理异常特殊字符

如何处理弹出、模态、可调整大小的表单

如何处理插入 '\0' 的字符数组?