gpt4 book ai didi

c - strncpy的实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:52 34 4
gpt4 key购买 nike

我已经尝试实现string n copy 功能。我已经成功了,但我试图优化我的代码,但它不起作用。

char *mystrncpy(char *dst, const char *src, size_t n)
{
int i;
char *temp;
temp = dst;
for (i = 0; i < n; i++)
*dst++ = *src++;
return temp;
}

上面的代码工作正常。

但是下面这个有一些问题。它只是为我传递的任何 n 值返回 src 字符串。

char *my_strncpy(char *dst, const char*src, size_t n)
{
char *temp = dst;
while ((*dst++ = *src++) && (--n));
return temp;
}

最佳答案

这两个代码片段不等价:

  • 第一个遍历并复制所有 n 个字符,不管字符串的内容如何;
  • 第二个在复制空终止符或复制 n 个字符后立即停止,以先到者为准。

第一个和第二个实现都不等同于标准库中的 strncpy,它复制到终止符,然后继续用零填充剩余空间。要使您的函数符合标准,请在 return 语句之前添加此行:

for (; n-- ; *dst++ = '\0');

另一件需要注意的事情是,strncpy 背后的意图经常被误解:它用于处理固定长度的字符串,而不是具有固定限制的可变长度字符串。这就是为什么您需要对从 strncpy 获得的结果进行空终止:如果 src 字符串长于 n 个字符,则结果字符串不会以 null 结尾。

关于c - strncpy的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14159625/

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