在特定情况下,我需要变量(字符数组或std:string),其大小不应超过10 kB。
如何限制此变量的大小?
答案 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_back
,append
等编写类似的功能
当然,您应该负责调用这些函数而不是字符串成员。