[英]Implementation of strncpy
我已經嘗試實現字符串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;
}
上面的代碼工作正常。
但是下面的一個有一些問題。 它只是返回我傳遞的任何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
字符,則結果字符串將不會以空終止。
第二個版本不起作用,因為它可能會超出n
。 在前面拉n == 0
的測試
while (n-- && (*dst++ = *src++))
;
並且不要把;
在該行的末尾。 在那里很容易錯過。
您可以在man strncpy
看到示例實現
您可以使用此代碼,越簡單越好!
void Strncpy( char* _dst, const char* _src, size_t _n )
{
size_t i = 0;
while(i++ != _n && (*_dst++ = *_src++));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.