注意事项:
这是一个关于纯C的问题,没有C++函数等等。
问题:
假设我 malloc
一个缓冲区,它有 100 个 chars
的空间。然后,我只用实际的 chars
填充其中的 5 个。我听说最佳做法是像这样清空缓冲区中所有剩余的插槽:
while (nextAvailableBufferSlot < currentBufferSize)
{
buffer[nextAvailableBufferSlot] = '\0';
nextAvailableBufferSlot++;
}
这是绝对必要的,还是我可以简单地设置 buffer[5] = '\0'
并为自己节省一个循环?
上下文:
有问题的代码非常被频繁调用,缓冲区大小为 4096,复制到其中的 99% 的字符串要短得多,使得上面的循环几乎每次至少运行一次几千次迭代。
我不可能提前知道字符串的大小。而且由于重新分配非常昂贵,所以我最初选择了较大的缓冲区大小。我的目标是桌面级硬件,因此内存完全不受限制。
请您参考如下方法:
如果您要复制的是字符串,您可以使用strncpy
来复制字符串,额外的缓冲区空间将为您填充\0
。
如果出于某种原因您正在使用 strcpy
或手动复制字符串,那么是的,您可以避免循环,因为所有标准字符串操作(strlen
,strcpy
等)无论如何都会在第一个 \0
处停止。