C ++字符数组错误处理

时间:2014-10-29 19:45:22

标签: c++ error-handling

如果我在c ++中声明一个字符串数组,例如

char name[10]

如果输入超出字符限制,您将如何处理错误?

编辑:我的任务是使用cstring而不是string。输入将是该人的全名。

4 个答案:

答案 0 :(得分:1)

我正在拼凑说明您的说明使用<cstring>,因此您可以使用strlen检查字符串的长度,然后再将其“分配”到您的名称数组。

就像......

const int MAX_NAME_LEN = 10;
char name[MAX_NAME_LEN];
// ...
// ...
if (strlen(input)+1 >= MAX_NAME_LEN) {
// can't save it, too big to store w/ null char
}
else {
// good to go
}

答案 1 :(得分:1)

这是一个示例,其中setName在分配char [10]属性之前检查大小是否正常。

注意char [10]只能存储9个字符的名称,因为你需要一个字符来存储字符串结尾。

也许这就是你想要的:

#include <iostream>
#include <cstring>
using namespace std;

#define FIXED_SIZE 10

class Dummy
{
public:
    bool setName( const char* newName )
    {
        if ( strlen( newName ) + 1 > FIXED_SIZE )
            return false;

        strcpy( name, newName );
        return true;
    }
private:
    char name[FIXED_SIZE];
};

int main()
{
    Dummy foo;

    if ( foo.setName( "ok" ) )
        std::cout << "short works" << std::endl;
    if ( foo.setName( "012345678" ) )
        std::cout << "9 chars OK,leavs space for \0" << std::endl;
    if ( !foo.setName( "0123456789" ) )
        std::cout << "10 chars not OK, needs space for \0" << std::endl;
    if ( !foo.setName( "not ok because too long" ) )
        std::cout << "long does not work" << std::endl;

    // your code goes here
    return 0;
}

答案 2 :(得分:0)

首先你的问题不明确。无论如何,我假设您想要一种方法来确保数组索引不会超出范围。

超出该范围的任何内容都会导致未定义的行为。如果索引接近范围,很可能您会读取自己程序的内存。如果索引大部分超出范围,很可能你的程序将被操作系统杀死。

这意味着未定义的行为可能意味着程序崩溃,正确的输出等。

答案 3 :(得分:0)

由于其他人提到了如何使用预定义的输入字符串执行此操作,因此这是一个从输入中读取c字符串的解决方案:

#include <iostream>

#define BUF_SIZE 10

using namespace std;
int main()
{
    char name[BUF_SIZE];
    cin.get(name, BUF_SIZE-1);
    if (cin) //No eof
        if (cin.get() != '\n')
            cerr << "Name may not exceed " << BUF_SIZE-1 << " characters";
}