注意:
这是关于纯C的问题。没有C++函数,等等。

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

while (nextAvailableBufferSlot < currentBufferSize)
{
    buffer[nextAvailableBufferSlot] = '\0';
    nextAvailableBufferSlot++;
}
这是绝对必要的,还是我可以简单地设置buffer[5] = '\0'并为自己保存一个循环?

内容:
有问题的代码被频繁调用,缓冲区大小为4096,被复制到其中的字符串的99%短得多,这使得上面的循环几乎每次至少运行数千次迭代。
我不可能事先知道琴弦的大小。而且由于重新分配非常昂贵,因此我最初选择了较大的缓冲区。我的目标是台式机级硬件,因此内存根本不受限制。

最佳答案

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

如果出于任何原因使用strcpy或手动复制字符串,那么可以,可以保存循环,因为所有标准字符串操作(strlenstrcpy等)都会在第一个\0处停止。

关于c - 超大缓冲区中的C字符串空终止符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22852514/

10-16 17:06