如何将数组限制为特定大小(以千字节为单位)

时间:2011-12-22 11:54:17

标签: c++ c

在特定情况下,我需要变量(字符数组或std:string),其大小不应超过10 kB。

如何限制此变量的大小?

3 个答案:

答案 0 :(得分:4)

对于字符数组,只需执行

char ten_k[10240];

并不是说C中的字符数组会自动增长,所以我很难看到这对你来说是个问题。

在C ++中,您可能需要包装标准字符串类型以实现限制。这通常是作为模板类完成的,即你有类似的东西:

LimitedString<10240> ten_k;

当然,这有点倒退;将限制合并到任何代码首先生成字符串更有意义,因为该代码可能知道在达到限制时该怎么做。

答案 1 :(得分:4)

只是不要将其调整为超过大小限制:

char* realloc_lim(char* data, int new_count, bool &ok)
{
    if(sizeof(char) * new_count > SIZE_LIMIT)
    {
        ok = false;
        return null;
    } else {
        ok = true;
        return (char*)realloc((void*)data, sizeof(char) * new_count);
    }
}

你可以像这样使用它:

bool allocation_ok = false;
int newsize = readint(); // read the size as an int from somewhere
buffer = realloc_lim(buffer, newsize, &allocation_ok);
if(!allocation_ok)
{
    printf("Input size was too large!\n");
}

答案 2 :(得分:3)

C ++没有为此提供机制。但是,您可以实现自己的独立myresize函数,它可以执行以下操作:

bool myresize(std::string& s, int newSize)
{
     if(newSize > maxSize)
       return false;
     s.resize(newSize);
     return true;
}

您可以为push_backappend等编写类似的功能

当然,您应该负责调用这些函数而不是字符串成员。