您好,我在測驗實作時遇到了一個問題 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 != '\0')
*dst = *src ;
i ;
}
*dst = '\0';
return i 1;
}
我用原來的 strlcpy 做了一個測驗,但我沒有得到相同的結果 src = "string", len = 6 我的 strlcpy 輸出
return value = 6
dst = strin
原始 strlcpy 的輸出
return value = 10
dst = strin
結果在 dst 中相同,但在回傳值中應該是嘗試生成的字串的長度
uj5u.com熱心網友回復:
它應該回傳要復制的字串的長度,而不是結果的長度。
你似乎聲稱你做到了
ft_strlcpy(dst, "string", 6); // 6
和
strlcpy(dst, "string", 6); // 10
但輸出表明你做了一些更接近于
ft_strlcpy(dst, "abcdefghij", 6); // 6
和
strlcpy(dst, "abcdefghij", 6); // 10
strlcpy回傳它嘗試創建的字串的長度,這意味著如果沒有施加限制,將被復制的字串的長度。這不是ft_strlcpy回報。
固定的:
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;
}
uj5u.com熱心網友回復:
從檔案
在
strlcpy()和strlcat()函式回傳他們嘗試創建的字串的總長度。因為strlcpy()那意味著 的長度src。
您正在回傳結果字串的長度,而不是沒有len限制的長度。
保存strlen(src)在一個變數中并在最后回傳。
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 != '\0')
{
*dst = *src ;
i ;
}
*dst = '\0';
return l;
}
此外,len引數和回傳型別應該是size_t.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/348670.html
