gpt4 book ai didi

c - 如何正确使用strncpy?

转载 作者:太空狗 更新时间:2023-10-29 15:44:24 26 4
gpt4 key购买 nike

我知道strncpystrcpy 的更安全版本如前所述here .

但是,当我想从src复制时至 dstdst不是干净的缓冲区,我得到不需要的结果,这可以通过 strcpy 避免:

char *p = "123";
char a[10] = "aaaaaa";

strncpy(a,p,strlen(p));
printf("%s\n", a); // 123aaa

strcpy(a,p);
printf("%s\n", a); // 123 <- desired output, as the trailing a's are garbage

在我的实际情况下,我知道strlen(src) < sizeof(dst) (至少,如果不是这种情况,程序会更快崩溃),所以我可以安全地 strcpy .

但是,如果 strncpy是我应该使用的,那么我必须在 dst[strlen(src)] = '\0' 之后添加避免垃圾(或者更好的是,事先初始化缓冲区?)?

最佳答案

strncpy 的第三个参数表示目标缓冲区的大小。当它填满时,它不会按设计添加空终止字符。

如果您有足够的空间用于终止符并且您坚持使用 strncpy,只需传递 strlen(p) + 1 这样它就不会假设它耗尽了目标缓冲区。

就像现在已经注意到的许多人一样。 strncpy 的这种使用违背了目的,实际上并不比简单地调用 strcpy 好多少。 strncpy 的唯一实际用途是,如果您想就地覆盖字符串的一部分(这是您偶然发现的用例)。虽然这也是有问题的用途......

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

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