关于我自己实现 strlcpy 的问题?
problem on My own implemntation of strlcpy?
你好,我刚刚在测试 strlcpy
的实现时遇到了问题
long unsigned int ft_strlcpy(char *dst, const char *src, unsigned int len)
{
unsigned int l;
unsigned int i;
i = 0;
while (i < len - 1)
{
if (*src != '[=10=]')
*dst++ = *src++;
i++;
}
*dst = '[=10=]';
return i + 1;
}
我用原始的 strlcpy 做了一个测试,但我没有得到相同的结果
src = "字符串", len = 6
我的 strlcpy
的输出
return value = 6
dst = strin
原始strlcpy的输出
return value = 10
dst = strin
结果在 dst 中是相同的,但在 return 中值应该是试图生成的字符串的长度
The strlcpy()
and strlcat()
functions return the total length of the string they tried to create. For strlcpy()
that means the length of src
.
您 return 计算结果字符串的长度,而不是没有 len
限制的长度。
将 strlen(src)
保存在变量中,并 return 保存在最后。
size_t ft_strlcpy(char *dst, const char *src, size_t len)
{
size_t l = strlen(src);
size_t i = 0;
while (i < len - 1 && *src != '[=10=]')
{
*dst++ = *src++;
i++;
}
*dst = '[=10=]';
return l;
}
此外,len
参数和return类型应该是size_t
。
它应该return要复制的字符串的长度,而不是结果的长度。
你似乎声称你做到了
ft_strlcpy(dst, "string", 6); // 6
和
strlcpy(dst, "string", 6); // 10
但输出表明你做了一些更接近
的事情
ft_strlcpy(dst, "abcdefghij", 6); // 6
和
strlcpy(dst, "abcdefghij", 6); // 10
strlcpy
returns 它试图创建的字符串的长度,这意味着如果限制,将被复制的字符串的长度没有被强加。这不是什么 ft_strlcpy
returns.
固定:
size_t ft_strlcpy(char *dst, const char *src, size_t len) {
if ( !len )
return strlen(dst);
size_t i = 0;
while ( --len ) {
if ( !( *dst++ = *src++ ) )
return i;
++i;
}
while (*str) {
++str;
++i;
}
return i;
}
你好,我刚刚在测试 strlcpy
long unsigned int ft_strlcpy(char *dst, const char *src, unsigned int len)
{
unsigned int l;
unsigned int i;
i = 0;
while (i < len - 1)
{
if (*src != '[=10=]')
*dst++ = *src++;
i++;
}
*dst = '[=10=]';
return i + 1;
}
我用原始的 strlcpy 做了一个测试,但我没有得到相同的结果 src = "字符串", len = 6 我的 strlcpy
的输出return value = 6
dst = strin
原始strlcpy的输出
return value = 10
dst = strin
结果在 dst 中是相同的,但在 return 中值应该是试图生成的字符串的长度
The
strlcpy()
andstrlcat()
functions return the total length of the string they tried to create. Forstrlcpy()
that means the length ofsrc
.
您 return 计算结果字符串的长度,而不是没有 len
限制的长度。
将 strlen(src)
保存在变量中,并 return 保存在最后。
size_t ft_strlcpy(char *dst, const char *src, size_t len)
{
size_t l = strlen(src);
size_t i = 0;
while (i < len - 1 && *src != '[=10=]')
{
*dst++ = *src++;
i++;
}
*dst = '[=10=]';
return l;
}
此外,len
参数和return类型应该是size_t
。
它应该return要复制的字符串的长度,而不是结果的长度。
你似乎声称你做到了
ft_strlcpy(dst, "string", 6); // 6
和
strlcpy(dst, "string", 6); // 10
但输出表明你做了一些更接近
的事情ft_strlcpy(dst, "abcdefghij", 6); // 6
和
strlcpy(dst, "abcdefghij", 6); // 10
strlcpy
returns 它试图创建的字符串的长度,这意味着如果限制,将被复制的字符串的长度没有被强加。这不是什么 ft_strlcpy
returns.
固定:
size_t ft_strlcpy(char *dst, const char *src, size_t len) {
if ( !len )
return strlen(dst);
size_t i = 0;
while ( --len ) {
if ( !( *dst++ = *src++ ) )
return i;
++i;
}
while (*str) {
++str;
++i;
}
return i;
}