Rag*_*ddy 1 c linux string gcc
我曾尝试实现字符串 n 复制功能。我已经成功了,但我试图优化我的代码,但它不起作用。
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;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常。
但是下面的有一些问题。它只是src为n我传递的任何值返回字符串。
char *my_strncpy(char *dst, const char*src, size_t n)
{
char *temp = dst;
while ((*dst++ = *src++) && (--n));
return temp;
}
Run Code Online (Sandbox Code Playgroud)
这两个代码片段是不等价的:
n无论字符串的内容如何,第一个都会遍历并复制所有字符;n字符后立即停止,以先到者为准。第一个和第二个实现都不等同于strncpy来自标准库,它复制到终止符,然后继续用零填充剩余空间。要使您的函数符合标准,请在return语句前添加以下行:
for (; n-- ; *dst++ = '\0');
Run Code Online (Sandbox Code Playgroud)
另一件需要注意的是,背后的意图strncpy经常被误解:它是用来处理固定长度的字符串,而不是具有固定限制的可变长度字符串。这就是为什么您需要对从中获得的结果进行空终止strncpy:如果src字符串比n字符长,则结果字符串不会以空终止。
| 归档时间: |
|
| 查看次数: |
12887 次 |
| 最近记录: |