gpt4 book ai didi

c - 何时使用 strncpy 或 memmove?

转载 作者:太空狗 更新时间:2023-10-29 16:30:08 27 4
gpt4 key购买 nike

(海湾合作委员会 4.4.4 c89)

我一直使用strncpy 来复制字符串。我从来没有真正使用过 memmovememcpy。不过,我只是想知道您什么时候决定是使用 strncpymemmove 还是 memcpy

我正在编写的代码用于客户端/服务器应用程序。在文档中,他们使用 bcopy。但是,我可以对其他人做同样的事情吗?

bcopy((char*)server->h_addr,
(char*)&serv_addr.sin_addr.s_addr,
server->h_length);

非常感谢,

最佳答案

strncpy() 用于将数据从一个源复制到一个设定大小的目标,复制(填充)0x00s 如果 0x00 byte 在缓冲区末尾之前的源数组(字符串)中找到。与 strcpy 相反,它会永远复制直到找到 0 字节 - 即使该字节远远超出您的缓冲区。

memcpy() 用于从源复制到目标,无论源数据包含什么。它还倾向于对硬件进行高度优化,并且经常会一次读取系统字 (ints/longs),以便在对齐允许时加快复制速度。

memmove() 用于从重叠的源区域和目标区域进行复制(比如在自身内部移动数组的内容或类似的东西 - 因此移动助记符)。它使用策略(例如可能从后面而不是前面开始复制数据)来防止重叠区域引起的问题。它的效率也可能略低,因为通常没有太多硬件帮助从后到前复制数据。

bcopy() 及其亲戚(bzero 和其他几个)是我在嵌入式领域不时看到的字节复制函数。通常,它一次将一个字节的数据从源复制到目标,以防止出现内存地址未对齐的问题,尽管任何好的 memcpy 都会处理这个问题,因此它的使用经常令人怀疑。

祝你好运!

关于c - 何时使用 strncpy 或 memmove?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884874/

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