gpt4 book ai didi

超大缓冲区中的 C 字符串空终止符

转载 作者:行者123 更新时间:2023-12-02 03:36:48 25 4
gpt4 key购买 nike

注意事项:

这是一个关于纯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 字符串空终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com