这是关于纯C.没有C ++函数等的问题
假设我malloc
缓冲区有100 chars
的空间。然后,我只用实际chars
填充其中5个插槽。我听说最佳做法是将缓冲区中所有剩余的插槽都清空,如下所示:
while (nextAvailableBufferSlot < currentBufferSize)
{
buffer[nextAvailableBufferSlot] = '\0';
nextAvailableBufferSlot++;
}
这是非常必要的,还是我可以设置buffer[5] = '\0'
并为自己保存一个循环?
有问题的代码经常被称为 very ,缓冲区大小为4096,并且99%的字符串被复制到其中的时间要短得多,这使得上面的循环几乎每次运行至少几千次迭代。
我不可能事先知道琴弦的大小。因为重新分配是如此昂贵,我最初选择一个大的缓冲区大小。我的目标是桌面级硬件,因此内存根本不受限制。
答案 0 :(得分:1)
如果您正在复制它的字符串,则可以使用strncpy
复制字符串,并为您填充额外的缓冲区空间{/ 1}}。
如果由于某种原因您使用\0
或手动复制字符串然后是,则可以保存循环,因为所有标准字符串操作(strcpy
,strlen
等)无论如何都将停在第一个strcpy
。
答案 1 :(得分:0)
简短的回答是肯定你是对的。你应该只需要一个在数组中最后一个char之后的空指针。
典型的答案是,为什么不使用char指针?类似于字符串的char *可以帮助您解决整个问题,并且有一些库可以更轻松地操作这些库。您不需要以这种方式直接分配内存。为什么你有一个特定的原因需要100个缓冲区?
答案 2 :(得分:0)
出于所有实际目的,您只需NUL
在最后一个位置填充后终止第一个位置。
这就是任何函数在操作字符串时知道在哪里停止所需的全部内容。
答案 3 :(得分:0)
使用Calloc()函数代替。它会自动将内存块初始化为零(即相当于分配NULL,因为NULL的ASCII代码为0)。然后,您不需要将每个槽明确分配给Null。