注意事项:

这是一个关于纯C的问题,没有C++函数等等。


问题:

假设我 malloc 一个缓冲区,它有 100 个 chars 的空间。然后,我只用实际的 chars 填充其中的 5 个。我听说最佳做法是像这样清空缓冲区中所有剩余的插槽:

while (nextAvailableBufferSlot < currentBufferSize)  
{ 
    buffer[nextAvailableBufferSlot] = '\0'; 
    nextAvailableBufferSlot++; 
} 

这是绝对必要的,还是我可以简单地设置 buffer[5] = '\0' 并为自己节省一个循环?


上下文:

有问题的代码非常被频繁调用,缓冲区大小为 4096,复制到其中的 99% 的字符串要短得多,使得上面的循环几乎每次至少运行一次几千次迭代。

我不可能提前知道字符串的大小。而且由于重新分配非常昂贵,所以我最初选择了较大的缓冲区大小。我的目标是桌面级硬件,因此内存完全不受限制。

请您参考如下方法:

如果您要复制的是字符串,您可以使用strncpy 来复制字符串,额外的缓冲区空间将为您填充\0

如果出于某种原因您正在使用 strcpy 或手动复制字符串,那么是的,您可以避免循环,因为所有标准字符串操作(strlenstrcpy 等)无论如何都会在第一个 \0 处停止。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!