这是一个功能阅读线的简短片段.这bufsize
与它相比((size_t)-1)/2
有何可能?
我想象将变量与例如比较.int
- 这是不可能的; 相反,INT_MAX是正确的,我想.那么该代码如何实际工作并且不会出错?
int c;
size_t bufsize = 0;
size_t size = 0;
while((c=fgetc(infile)) != EOF) {
if (size >= bufsize) {
if (bufsize == 0)
bufsize = 2;
else if (bufsize <= ((size_t)-1)/2)
bufsize = 2*size;
else {
free(line);
exit(3);
}
newbuf = realloc(line,bufsize);
if (!newbuf) {
free(line);
abort();
}
line = newbuf;
}
/* some other operations */
}
Run Code Online (Sandbox Code Playgroud)
(size_t)-1
Run Code Online (Sandbox Code Playgroud)
这是铸造价值-1
的size_t
.(type)value
是C的演员.
由于size_t
是无符号类型,这实际上是size_t
可以容纳的最大值,因此它用于确保缓冲区大小实际上可以安全地加倍(因此后续除以2).